none
VBS как отключить сетевой интерфейс? RRS feed

  • Вопрос

  • Доброго дня, уважаемые знатоки.
    да. могу предположить что сейчас полетят помидоры в мою сторону, поскольку тема не новая.

    Встал вопрос, об отключении сетевой карты програмно (аналог, нажатия ПКМ "отключить", на сетевом подключении) для WinXP Rus.

    даже успешно был найден скрипт
    http://gallery.technet.microsoft.com/ScriptCenter/en-us/07b70d68-7bfb-459c-80f6-0919704fedf2

    но моих скромных знаний по VBS, оказалось недостаточно для приминения данного скрипта на русскую винду, простой заменой

    sConnectionName = "Local Area Connection"  на sConnectionName = "подключение по локальной сети"
    и
    if folderitem.name  = "Network Connections" then  на if folderitem.name  = "Сетевые подключения" then

    ни чего не вышло...

    выдает ошибку

    строка 73
    символ 3
    Требуется объек `oDisableVerb`

    Прошу помочь разобраться со скриптом! заранее спасибо всем!

    вариант с DevCon не прокатил потому как машинки бывают с разными сетвками и задать какой то конкретный Вендор для устройства не получается..

    28 октября 2009 г. 6:17

Ответы

  • > Требуется объек `oDisableVerb`

    Посмотрите, как он называется в ПКМ. "Отключить" или как там его.

    > вариант с DevCon не прокатил потому как машинки бывают с разными сетвками и задать какой то конкретный Вендор для устройства не получается..

    Зачем вам Devcon, когда есть универсальный для любой сетевой cnic.exe ?

    И батник для включения/отключения нужного интерфейса:

    @echo off
    setlocal

    for /f "tokens=1,2 delims=-" %%i in ('cnic -l ^| findstr [0-9]') do call:set %%i "%%j"

    for /f "tokens=2-4 delims=_=" %%i in ('set nic_') do (
        if "%%k"=="OFF" (
            echo [%%i] %%k %%j
        ) else (
            echo [%%i] %%k %%j
        )
    )
    echo.
    echo ===============
    set /p select="Select interface to ON/OFF: "

    if not defined nic_%select% goto:eof

    for /f "tokens=2,4 delims=_=" %%i in ('set nic_%select%') do (
        if "%%j"=="OFF" (cnic n:%%i -c) else (cnic n:%%i -d)
    )
    goto:eof

    :set
    set "status= ON"

    for /f "tokens=2 delims=-" %%i in ('cnic n:%1 -s -v') do (
        if "%%i"==" disconnected" (set "status=OFF") else (set "status= ON")
    )

    set "nic_%1=%~2_%status%"

    • Помечено в качестве ответа ELF.Aiira 28 октября 2009 г. 22:09
    28 октября 2009 г. 6:51

Все ответы

  • > Требуется объек `oDisableVerb`

    Посмотрите, как он называется в ПКМ. "Отключить" или как там его.

    > вариант с DevCon не прокатил потому как машинки бывают с разными сетвками и задать какой то конкретный Вендор для устройства не получается..

    Зачем вам Devcon, когда есть универсальный для любой сетевой cnic.exe ?

    И батник для включения/отключения нужного интерфейса:

    @echo off
    setlocal

    for /f "tokens=1,2 delims=-" %%i in ('cnic -l ^| findstr [0-9]') do call:set %%i "%%j"

    for /f "tokens=2-4 delims=_=" %%i in ('set nic_') do (
        if "%%k"=="OFF" (
            echo [%%i] %%k %%j
        ) else (
            echo [%%i] %%k %%j
        )
    )
    echo.
    echo ===============
    set /p select="Select interface to ON/OFF: "

    if not defined nic_%select% goto:eof

    for /f "tokens=2,4 delims=_=" %%i in ('set nic_%select%') do (
        if "%%j"=="OFF" (cnic n:%%i -c) else (cnic n:%%i -d)
    )
    goto:eof

    :set
    set "status= ON"

    for /f "tokens=2 delims=-" %%i in ('cnic n:%1 -s -v') do (
        if "%%i"==" disconnected" (set "status=OFF") else (set "status= ON")
    )

    set "nic_%1=%~2_%status%"

    • Помечено в качестве ответа ELF.Aiira 28 октября 2009 г. 22:09
    28 октября 2009 г. 6:51
  • Там еще в самом начале скрипта нужно исправить значения переменных на русские - это пункты контекстного меню.

    sEnableVerb = "En&able"
    sDisableVerb = "Disa&ble"

    Вообще, скрипт эмулирует последовательность действий в графическом интерфейсе, когда производится отключение или включение сетевого подключения.

    Посмотрите еще это обсуждение:

    http://social.technet.microsoft.com/forums/ru-RU/windowsserverru/thread/1d406310-b6d7-4bd0-a8ae-af103f33aa1e/
    28 октября 2009 г. 6:53
    Модератор
  • > sConnectionName = "Local Area Connection"  на sConnectionName = "подключение по локальной сети"

    Возможно, еще и потому, что на самом деле должно быть "Подключение по локальной сети"

    ЗЫ и вообще было бы неплохо модифицировать скрипт так, чтобы он не зависел от названия сетевого интерфейса.
    28 октября 2009 г. 7:14
  • 01MDM, спасибо за програмулинку, что-то во время поиска решений не обратил на нее внимание, за коммандник тоже спасибо! пока попользуюсь им.

    to osr, исправил, но проблема где глубже сидит, буду копать вопрос, тем более что по ссылке s.h.s. нашел скрипт для русской W2k

    спасибо всем!
    28 октября 2009 г. 22:08
  • Получить список всех интерфейсов:
    netsh
    interface show interface

    Запретить интерфейс:
    netsh interface set interface "Local Area Connection" DISABLE

    ______________________________________________________________________

    Получить список всех интерфейсов:
    $a = gwmi Win32_NetworkAdapter

    Отфильтровать (пример):
    $b = $a | ? {$_.DeviceID -eq 6}

    Запретить:
    $b.Disable()

    Разрешить:
    $b.Enable()

    Сазонов Илья http://www.itcommunity.ru/blogs/sie-wl/
    29 октября 2009 г. 11:25
    Модератор
  • Вопрос. Почему так не работает, пишет "incorrect verb":

    wmic nic where NetConnectionID="Local Area Connection" call Disable
    wmic class Win32_NetworkAdapter where NetConnectionID="Local Area Connection" call Disable

    А так работает:

    (gwmi Win32_NetworkAdapter | ? { $_.NetConnectionID -eq "Local Area Connection" }).Disable()

    Ведь по сути идет вызов одних и тех же функции. Подозреваю, что и netsh все решает через wmi, он тоже не отключает интерфейс.
    29 октября 2009 г. 11:53
  • Посмотрите вот так wmic nic Win32_NetworkAdapter /?

    - это покажет что допустимо, а что нет :-) Т.е. команда Call недопустима...
    Сазонов Илья http://www.itcommunity.ru/blogs/sie-wl/
    30 октября 2009 г. 11:23
    Модератор
  • > это покажет что допустимо, а что нет

    Так допустимо же:

    > wmic class win32_NetworkAdapter call /?
    Method execution operations.
    USAGE:

    CALL <method name> [<actual paramlist>]
    NOTE: <actual paramlist> ::= <actual param> | <actual param>,  <actual paramlist>

    The following verb(s)/method(s) are available:

    Call            [ In/Out ]Params&type            Status
    ====            =====================            ======
    Disable                 [OUT]ReturnValue(uint32)                Implemented    

    Enable                  [OUT]ReturnValue(uint32)                Implemented    

    Reset                   [OUT]ReturnValue(uint32)                Not Found      

    SetPowerState           [IN ]PowerState(uint16)                 Not Found      

                [IN ]Time(datetime)                     

                [OUT]ReturnValue(uint32)                


    31 октября 2009 г. 6:51
  • Класс это абстракция - он не привязан к конкретным сетевым картам в отличие от объектов.
    Сазонов Илья http://www.itcommunity.ru/blogs/sie-wl/
    2 ноября 2009 г. 4:17
    Модератор
  • Кстати говоря, методы disable и enable класса Win32_NetworkAdapter доступны начиная с Висты. Можно ли в ХР каким либо образом отключить сеть удалённо? Через WMI было бы идеально. Или как это сделать через netsh, если заранее неизвестно имя интерфейса?
    MCP | scriptoholic | PowerShell | SCCM 2007 | SMS 2003
    3 ноября 2009 г. 15:54
  • Как-нибудь так:

    @echo off
    setlocal

    set "exec=netsh interface ip show interfaces"

    for /f "tokens=5*" %%i in ('%exec% ^| findstr /v "Loopback" ^| findstr "\<connected"') do (
         echo       netsh interface set interface "%%i %%j" DISABLE
    )

     
    "Должно" отключать все включенные интерфейсы на локальной машине, кроме петли. Соответственно netsh c ключами -r -u -p для удаленной. Но боюсь, что это не сработает, так как на XP c помощью netsh пробовали отключить сетевые интерфейсы на разных машинах. Ничего не получалось.

    Да и на 7-ке тоже возможны проблемы, у меня ни netsh, ни wmic не справляются. А через Get-WmiObject все нормально..
    3 ноября 2009 г. 16:59

  • Да и на 7-ке тоже возможны проблемы, у меня ни netsh, ни wmic не справляются. А через Get-WmiObject все нормально..
    UAC работает :-)

    Сазонов Илья http://www.itcommunity.ru/blogs/sie-wl/
    5 ноября 2009 г. 3:36
    Модератор
  • Кстати говоря, методы disable и enable класса Win32_NetworkAdapter доступны начиная с Висты. Можно ли в ХР каким либо образом отключить сеть удалённо? Через WMI было бы идеально. Или как это сделать через netsh, если заранее неизвестно имя интерфейса?
    MCP | scriptoholic | PowerShell | SCCM 2007 | SMS 2003

    http://support.microsoft.com/kb/262265  в этой статье рекомендуют просто поменять ip адрес :-)
    Сазонов Илья http://www.itcommunity.ru/blogs/sie-wl/
    5 ноября 2009 г. 3:45
    Модератор
  • В общем все странно выходит. Сегодня еще раз проверил.. всё работает. Наверное я один раз затупил, где-то ошибся, и был на все 100 уверен. Действительно в 7-ке вызываются методы Disable/Enable. Ну я, ...это, извиняюсь :(
    5 ноября 2009 г. 8:25
  • http://support.microsoft.com/kb/262265   в этой статье рекомендуют просто поменять ip адрес :-)
    Сазонов Илья http://www.itcommunity.ru/blogs/sie-wl/
    Да они просто ацкие жгуны...

    MCP | scriptoholic | PowerShell | SCCM 2007 | SMS 2003
    5 ноября 2009 г. 14:49
  • Проблема в том, что я не могу отключить интерфейс, используя netsh даже когда явно указываю имя. Выводит сообщение: "Один или несколько обязательных параметров не указаны. Недопустимый синтаксис использованной команды. Воспользуйтесь справкой для этой команды." В справке написано, что нет такого параметра disable, есть disabled и disconnected. Но ввод этих параметров тоже не помогает, тоже выдаёт ошибку.
    MCP | scriptoholic | PowerShell | SCCM 2007 | SMS 2003
    5 ноября 2009 г. 15:02
  • Вы сразу постите то, что у вас в командной строке....
    Сазонов Илья http://www.itcommunity.ru/blogs/sie-wl/
    6 ноября 2009 г. 15:44
    Модератор
  • C:\WINDOWS\system32>netsh interface show interface

    Состояние адм.  Состояние     Тип              Имя интерфейса
    ---------------------------------------------------------------------
    Разрешен                      Выделенный       LAN
    Разрешен                      Внутренний       Внутренний
    Разрешен                      Замыкание на себя Замыкание на себя


    C:\WINDOWS\system32>netsh interface set interface "LAN" disable
    Один или несколько обязательных параметров не указаны
    Недопустимый синтаксис использованной команды. Воспользуйтесь справкой для этой команды.

    Использование: set interface [name = ] Имя_интерфейса
                  [ [admin = ] ENABLED|DISABLED
                  [connect = ] CONNECTED|DISCONNECTED
                  [newname = ] Новое_имя ]

          Устанавливает параметры интерфейса.

          IfName  - Имя интерфейса
          admin   - Должен ли этот интерфейс быть разрешенным (только не в LAN).
          connect - Подключен ли этот интерфейс (только не в LAN).
          newname - Новое имя этого интерфейса (только LAN).

          Примечания:
          - Кроме текущего имени должен быть указан по крайней мере один параметр.
          - Если указано connect = CONNECTED, то интерфейс будет автоматически
            разрешен, даже если указано значение параметра
            admin = DISABLED.

    C:\WINDOWS\system32>netsh interface set interface "LAN" disabled
    Один или несколько обязательных параметров не указаны
    Недопустимый синтаксис использованной команды. Воспользуйтесь справкой для этой команды.

    Использование: set interface [name = ] Имя_интерфейса
                  [ [admin = ] ENABLED|DISABLED
                  [connect = ] CONNECTED|DISCONNECTED
                  [newname = ] Новое_имя ]

          Устанавливает параметры интерфейса.

          IfName  - Имя интерфейса
          admin   - Должен ли этот интерфейс быть разрешенным (только не в LAN).
          connect - Подключен ли этот интерфейс (только не в LAN).
          newname - Новое имя этого интерфейса (только LAN).

          Примечания:
          - Кроме текущего имени должен быть указан по крайней мере один параметр.
          - Если указано connect = CONNECTED, то интерфейс будет автоматически
            разрешен, даже если указано значение параметра
            admin = DISABLED.
    -------------------------------
    P.S. Windows XP SP3
    MCP | scriptoholic | PowerShell | SCCM 2007 | SMS 2003
    17 ноября 2009 г. 10:33