niby nic skomplikowanego i jest masa różnych tooli do tego celu. podstawowym ograniczeniem w większości jakie testowałem był brak możliwości podania user/pass. czyżby było to niemożliwe? eeee tam… oczywiście, że się da. Oto skrypcik, który pokazuje jak stworzyć moniker WMI tak, aby podać odpowiednie credsy i wykonać restart:

CONST SH_LOGOFF = 0
CONST SH_FLOGOFF = 4
CONST SH_SHUTDOWN = 1
CONST SH_FSHUTDOWN= 5
CONST SH_REBOOT = 2
CONST SH_FREBOOT = 6
CONST SH_POWEROFF = 8
CONST SH_FPOWEROFF=12

strComputer = "192.168.1.123"

'tak to sie robi normalnie:
'Set OpSysSet = GetObject("winmgmts:{impersonationLevel=impersonate,(Shutdown)}//"&strComputer&"/root/cimv2")

'a tak jest to samo, podajac credsy:
set objLocator = CreateObject("WbemScripting.SWbemLocator")
set objWMI = objLocator.ConnectServer(strComputer, "rootcimv2", "nexor", "PASSWORD")
objWMI.Security_.ImpersonationLevel = 3
objWMI.Security_.Privileges.AddAsString "SeShutdownPrivilege", True

Set colOperatingSystems = objWMI.ExecQuery("SELECT * FROM " & "Win32_OperatingSystem WHERE Primary = true")

For Each objOperatingSystem in colOperatingSystems
ObjOperatingSystem.Win32Shutdown(SH_FSHUTDOWN)
Next

jak widać cały myk jest w zamianie standardowego monikera na złożony, poprzez utworzenie obiektu SWbemLocator a potem.. no właśnie – zalezienie sposobu na definicje obiektu security i specjalnych uprawnień – wypisane w skrypcie “seShutdownPrivilege” wyszperałem w necie bo te natechnecie są jakby na odwrót – metoda AddAsString przyjmuje najwyrazniej wartości opisane w kolumnie ‘descritpion’ a nie ‘Wbemdisp.tlb Constant’ co wydawałoby się logiczniejsze.

Spread the love

Comments (2)

  1. Odpowiedz

    ma oczywiście taką opcję… ale czasem trzeba coś więcej oprogramować, więc wersja skryptowa może się przydać (:

Zostaw komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Time limit is exhausted. Please reload CAPTCHA.