Скрипт переключает состояние указанного сетевого подключения компьютера (если включено - отключает, и наоборот). Без использования 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
'=============================================================================