Ostatnio mocno zainteresowałem się rozszerzeniami konsoli SCCMa. Ogólnie polegają one na fajnym wykorzystaniu przestrzeni nazw WMI, którą daje ConfigMgr. Ale żeby nie malować trawy na zielono najpierw zainstalowałem 2 pakiety wtyczek – SCCM Right Click Tools oraz SCCM Console Extensions. Po ich przetestowaniu muszę powiedzieć, że można robić niezłe cuda w MMC przy użyciu hta i vbs ;)
Tyle, że jedna funkcjonalność mi nie działała – Wake On Lan. Wiem, że komputery mają uruchomiony remote wake up i są podłączone do sieci (1 warstwa) mam możliwość directed broadcast (2. warstwa), więc problem musi być z działaniem samej wtyczki. Po kliknięciu tutaj:
Mamy śliczny komunikat, że wszystko się udało.
grzebiąc w kodzie znajdujemy coś takiego:
If errReturn <> 0 Then
LogArea.Value = LogArea.Value & "ERROR!" & vbCrLf
LogArea.Value = LogArea.Value & " " & Err.Description & vbCrLf
LogFile.WriteLine(Date & " " & Time & vbTab & "Send Wakeup: ERROR!" & vbTab & Err.Description)
LogArea.scrollTop = LogArea.scrollHeight
Else
WolSuccess = 1
LogArea.Value = LogArea.Value & "Wakeup sent to " & strMACAddress & vbCrLf
LogArea.scrollTop = LogArea.scrollHeight
LogFile.WriteLine(Date & " " & Time & vbTab & arrComputers(iList) & ": Wakeup sent to " & strMACAddress)
End If
Widać, że to nic innego niż wywołanie wol.exe z katalogu z rozszerzeniami. Sprawdzamy co się dzieje z tym programikiem. Po wpisaniu w CMD – "c:Program FilesSCCMConsoleExtensionsWOL.exe" 00219B7B80CD też działa… ale ale – brakuje adresu IP i maski do kierunkowego bradcastu. Patrzymy wol.exe /? można podać tylko IP :/ niedobrze. sieci z nie klasowymi maskami odpadają. po chwili szperan
ia w bingu znalazłem narzędzie wolcmd.exe. Usage: wolcmd [mac address] [ipaddress] [subnet mask] [port number]. No i pięknie teraz tylko wrzucić je do odpowiedniego katalogu i podmienić kawałęk skryptu na coś takiego:
For Each instance in colMACAddress
strMACAddress = instance.MACAddress
strWOLAddress = (Replace(instance.MACAddress,":",""))
strIPAddress = instance.IPAddress
LogArea.Value = LogArea.Value & arrComputers(iList) & ": "
LogArea.scrollTop = LogArea.scrollHeight
errReturn = WshShell.Run(chr(34) & strCurrentPath & "wolcmd.exe" & chr(34) & " " & strWOLAddress & " " & strIPAddress & " " & strNetmask & " 7",0)
If errReturn <> 0 Then
LogArea.Value = LogArea.Value & "ERROR!" & vbCrLf
LogArea.Value = LogArea.Value & " " & Err.Description & vbCrLf
LogFile.WriteLine(Date & " " & Time & vbTab & "Send Wakeup: ERROR!" & vbTab & Err.Description)
LogArea.scrollTop = LogArea.scrollHeight
Else
WolSuccess = 1
LogArea.Value = LogArea.Value & "Wakeup sent to " & strMACAddress & "" & strIPAddress & vbCrLf< font color="#808080">
LogArea.scrollTop = LogArea.scrollHeight
LogFile.WriteLine(Date & " " & Time & vbTab & arrComputers(iList) & ": Wakeup sent to " & strMACAddress)
End If
Next
No i wtedy działa :) Jeszcze jedna uwaga – w czasie szukania pól do skryptów niezastąpione jest narzędzie WMI CIM Studio. tylko należy pamiętać, żeby wybrać do przeglądania namespace \Srv1rootSMSsite_LAB gdzie Srv1 to nazwa serwera SCCM, a LAB to trzyliterowy kod site’u. Najciekawsze klasy są w gałęzi – SMS_GroupSMS_G_System_Current*