1

Тема: VBScript: перечисление сетевых подключений

WMI-скрипт перечисляет сетевые подключения компьютера, определяет их статус (подключено, отключено и т.п.).

strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colShares = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapter")
Set NetConnStat = CreateObject("Scripting.Dictionary")
NetConnStat.Add 0, "Disconnected"
NetConnStat.Add 1, "Connecting"
NetConnStat.Add 2, "Connected"
NetConnStat.Add 3, "Disconnecting"
NetConnStat.Add 4, "Hardware not present"
NetConnStat.Add 5, "Hardware disabled"
NetConnStat.Add 6, "Hardware malfunction"
NetConnStat.Add 7, "Media disconnected"
NetConnStat.Add 8, "Authenticating"
NetConnStat.Add 9, "Authentication succeeded"
NetConnStat.Add 10, "Authentication failed"
NetConnStat.Add 11, "Invalid address"
NetConnStat.Add 12, "Credentials required"
NetConnStat.Add Null, "Null"
For Each objShare In colShares
    Wscript.Echo NetConnStat.Item(objshare.NetConnectionStatus)
    Wscript.Echo objshare.AdapterType
    Wscript.Echo objshare.PNPDeviceID
    Wscript.Echo objshare.Description
    Wscript.Echo objshare.NetConnectionID
    Wscript.Echo
Next
Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.

2

Re: VBScript: перечисление сетевых подключений

Скрипт переключает состояние указанного сетевого подключения компьютера (если включено - отключает, и наоборот). Без использования WMI.
Идею опубликовал dmitry_a.

strNetConn = "Сетевые подключения" ' Network Connections для англ. версии ОС
strConn = "Подключение по локальной сети" ' имя или часть имени подключения
strEnable = "&Включить" ' En&able для англ. версии ОС
strDisable = "&Отключить" ' Disa&ble для англ. версии ОС

Set objShell = CreateObject("Shell.Application")
Set objCP = objShell.Namespace(3) ' Панель управления
For Each elem in objCP.Items
    If elem.Name = strNetConn Then
        ' получение папки "Сетевые подключения"
        Set colNetwork = elem.GetFolder
        Exit For
    End If
Next

Set Conn = Nothing
For Each clsConn in colNetwork.Items
    If Instr(LCase(clsConn.name), LCase(strConn)) Then
        ' получение указанного подключения
        Set Conn = clsConn
        Exit For
    End If
Next
If Conn Is Nothing Then
    WScript.Echo "Network Connection not found"
    WScript.Quit
End If

bEnabled = True
Set objEnable = Nothing
Set objDisable = Nothing
For Each clsVerb in Conn.verbs
    ' если доступен глагол "Enable", подключение отключено
    If clsVerb.Name = strEnable Then
        Set objEnable = clsVerb
        bEnabled = False
    End If
    ' если доступен глагол "Disable", подключение подключено
    If clsVerb.name = strDisable Then
        Set objDisable = clsVerb
    End If
Next

If bEnabled Then
    objDisable.DoIt
    strStatus = "disabled."
Else
    objEnable.DoIt
    strStatus = "enabled."
End If
WScript.Sleep 1000

WScript.Echo Conn.Name & " " & strStatus
Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.

3

Re: VBScript: перечисление сетевых подключений

Скрипт переключает состояние указанного сетевого подключения компьютера (если включено - отключает, и наоборот). Без использования WMI.

Отличия от скрипта, представленного в предыдущем посте:
* упрощена схема получения объекта Folder «Сетевые подключения»: объект получается напрямую, указанием соответствующего CSIDL_xxx (и, возможно, вследствие этого не будет работать ниже W2K);
* упрощена логика работы; соответственно, выкинуты лишние объекты objEnable, objDisable и переменная bEnabled;
* вместо простого ожидания «WScript.Sleep 1000», времени которого может оказаться недостаточно (см. VBScript: запуск файлов ассоциированным приложением), ждём действительной отработки глагола (процедура «WaitForVerb») и выходим из ожидания только по свершившемуся факту.
* результат переключения возвращаем как ERRORLEVEL: 0 — успешное переключение, всё, что больше — неудача.

Option Explicit

Const CSIDL_NetworkConnections = &H31


Dim strNetworkConnectionsName
Dim strVerbName_Enable
Dim strVerbName_Disable

Dim objShell
Dim objFolder_NetworkConnections
Dim objFolderItem
Dim objFolderItem_NetworkConnections

Dim objVerb


strNetworkConnectionsName = "Подключение по локальной сети" ' Имя сетевого соединения
strVerbName_Enable        = "&Включить"                     ' En&able для англ. версии ОС
strVerbName_Disable       = "&Отключить"                    ' Disa&ble для англ. версии ОС

Set objShell = WScript.CreateObject("Shell.Application")
Set objFolder_NetworkConnections = objShell.Namespace(CSIDL_NetworkConnections)

If objFolder_NetworkConnections Is Nothing Then
    WScript.Echo "Virtual Folder [Network Connections] not found."
    
    WScript.Quit 1
End If

For Each objFolderItem In objFolder_NetworkConnections.Items
    If UCase(objFolderItem.Name) = UCase(strNetworkConnectionsName) Then
        Set objFolderItem_NetworkConnections = objFolderItem
        
        Exit For
    End If
Next

If objFolderItem_NetworkConnections Is Nothing Then
    WScript.Echo "Connection [" & strNetworkConnectionsName & "] not found."
    
    WScript.Quit 2
End If

For Each objVerb In objFolderItem_NetworkConnections.Verbs
    If objVerb.Name = strVerbName_Enable Then
        objVerb.DoIt
        WaitForVerb objFolderItem_NetworkConnections, strVerbName_Disable
        
        Exit For
    End If
    
    If objVerb.Name = strVerbName_Disable Then
        objVerb.DoIt
        WaitForVerb objFolderItem_NetworkConnections, strVerbName_Enable
        
        Exit For
    End If
Next

Set objFolderItem_NetworkConnections = Nothing
Set objFolder_NetworkConnections     = Nothing
Set objShell                         = Nothing

WScript.Quit 0
'=============================================================================

'=============================================================================
Sub WaitForVerb(objFolderItem, strVerb)
    Dim objVerb
    
    Do
        For Each objVerb In objFolderItem.Verbs
            If objVerb.Name = strVerb Then
                Exit Do
            End If
        Next
        
        WScript.Sleep 100
    Loop
End Sub
'=============================================================================