Переписал на VBScript. Решение более красивое, проверяет внутренний ConnectionState винды на всех соединениях Ethernet (Ждет Connected или 120 секунд)
Запускается аналогично, через групповую политику
(GPEDIT.MSC -> Конфигурация компьютера -> Конфигурация Windows -> Сценарии -> Автозагрузка), а именно, через CScript (WScript не подойдет, так как возвращает выполнение родителю после запуска, CScript — после выполнения)
Дополнительно включено
(GPEDIT.MSC -> Конфигурация компьютера -> Административные шаблоны -> Система -> Сценарии -> Выполнять сценарии входа в систему синхронно: Включено)
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
'Получить список адаптеров, где AdapterType = 0 (что значит 802.3 (Ethernet))
Set colAdapters = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapter WHERE AdapterTypeID = 0")
adapter_number = 0
For Each objAdapter in colAdapters
adapter_number = adapter_number + 1
Next
flag_stoploop = False
cnt_timeout = 120 'Seconds
time_start = Now()
'Проверить количество адаптеров
If adapter_number <= 0 Then
'WScript.Echo "No adapters found!"
WScript.Quit
End If
while not flag_stoploop
If DateDiff("s",time_start,Now()) > cnt_timeout Then
flag_stoploop = True
'WScript.Echo "Stopping because of timeout"
WScript.Quit
End If
Set colAdapters = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapter WHERE AdapterTypeID = 0")
For Each objAdapter in colAdapters
WScript.Sleep 500
If (objAdapter.NetConnectionStatus = 2) Then
flag_stoploop = True
'WScript.Echo "Stopping because of connected"
Wscript.Quit
End If
Next
Также определил, что проблема в том, что адаптер слишком долго уведомляет систему о наличии подключенного кабеля Ethernet, буду копать, в чем проблема — роутер или же сетевуха компьютера.