PsShutdown.exe, czyli shutdown.exe „na sterydach”

W jednym z poprzednich artykułów prezentowałem polecenie shutdown, które w  Windows odpowiada za restart i wyłączenie systemu. Dzisiaj chciałbym zachęcić Was do zapoznania się z kolejnym programem pakietu  „PSTOOLS” – PsShutdown.exe.  Narzędzie to znacznie przewyższa swoimi możliwościami shutdown.exe i mam nadzieję, że podane poniżej przykłady przekonają Was o tym 😉

Cały pakiet PSTOOLS ściągniecie z tej lokalizacji: http://download.sysinternals.com/files/PSTools.zip.

Psshutdown to narzędzie działające tylko w wierszu poleceń i należy go uruchamiać z którymś z opisanych poniżej parametrów. Jego głównym przeznaczeniem jest praca na zdalnym komputerze, ale wszystkie jego funkcje z wyjątkiem „zablokowanie komputera” zadziałają na lokalnym komputerze.

 

Aby wyłączyć zdalną maszynę należy użyć następującej składni:

psshutdown.exe -s \\nazwa_komputera

Aby wykonać to samo na lokalnej maszynie wystarczy pominąć nazwę komputera.

Powyższa flaga –s odpowiada za wyłączenie systemu bez wyłączenia zasilania (ang. power off). Pewnie domyślacie się, że dla fizycznej maszyny nie ma to znaczenia, ale dla maszyny wirtualnej owszem ma.

Przełącznik –k wyłączy system i zasilanie:

psshutdown.exe -k \\nazwa_komputera

Znane z wielu innych poleceń przełączniki  –u (user) oraz  –p (password) to oczywiście nazwa użytkownika i hasło. Są to wartości opcjonalne:

psshutdown.exe -k –u użytkownik –p hasło \\nazwa_komputera

Aby wykonać restart zdalnej maszyny wystarczy wpisać:

psshutdown.exe -r \\nazwa_komputera

Domyślny czas po jakim wykona się każda operacja to 20 sekund. Możemy ten czas sprecyzować (w sekundach) dzięki fladze –t.

psshutdown.exe -s –t 5 \\nazwa_komputera

..gdzie ”5” to przykładowe 5 sekund.

Możemy podać treść wiadomości, jaką zobaczą użytkownicy zalogowani na danej maszynie przed restartem/wyłączeniem:

psshutdown.exe -r –m „za chwile nastapi restart serwera ” \\nazwa_komputera

Restart lub wyłączenie komputera możemy przerwać parametrem –a:

psshutdown.exe -a \\nazwa_komputera

Możemy wprowadzić maszynę w stan uśpienia:

psshutdown.exe -d \\nazwa_komputera

..albo w stan hibernacji:

psshutdown.exe -h \\nazwa_komputera


Jako naprawdę mocną stronę psshutdown.exe wymieniłbym parametr @file, który oznacza plik z listą komputerów. Tu na przykład zrestartujemy wszystkie maszyny z pliku moje_serwery.txt

psshutdown.exe -r @moje_serwery.txt

Oto pozostałe możliwości:

Parametr -f wymusi zamknięcie wszystkich aplikacji.

Parametr -l zablokuje komputer i to jest jedyna opcja, która nie zadziała na lokalnym komputerze.

Parametr –o wyloguje lokalnego użytkownika (sesja 0 w Windowsach sprzed 2008).

 

Jestem ogromnym fanem PSTOOLS i mam nadzieję, że Wy (już) także. Osoby, które jeszcze nie zaprzyjaźniły się z tym pakietem narzędzi zachęcam do zapoznania się z wcześniejszymi artykułami o możliwościach psexec i pslist.

Pozostałe programy będę opisywał sukcesywnie w następnych tygodniach, więc szczerze zachęcam do zaglądania na nasz Blog.

 

Łukasz Skalikow

Obecnie Manager IT. Przez lata byłem Inżynierem systemów. Jestem entuzjastą i specem od vSphere, Windows serwer, GPO. Od zawsze byłem zwolennikiem wiersza poleceń i automatyzacji. Obecnie, ze względu na pracę, rodzinę i wyjazdy służbowe, dużo mniej udzielam się na blogu, ale mam nadzieję, że pośród kilkuset porad opublikowanych na spece.it, wiele osób znajdzie dla siebie coś przydatnego :)

Przeczytaj także...

13 komentarzy

  1. Anonim napisał(a):

    Nie rozumiem jak to działa. Mogę restartować w sieci komputery, ale jako kto? Nie wpisuję użytkownika i hasła a program działa. Każdy user w sieci może zrestartować wszystkie maszyny? niemożliwe.

    Wiem, że podajesz przykłady z logowaniem, ale co się dzieje gdy nie podajesz parametrów logowania,a program działa. W czyim imieniu 🙂 ?

    • Łukasz Skalikow napisał(a):

      Hej, dzięki za czytanie naszego Bloga 🙂 Oczywiście, że nie jest tak, że każdy użytkownik może Ci wszytsko zrestartować:) Postaram sie odpowiedzieć na Twoje pytanie.

      Jeśli nie mówisz o komputerach w domenie i używasz użytkowników lokalnych:

      -z shutdown.exe mogłeś restartować zdalny komputer tylko podając poświadczenia w formie -u:\\ZDALNY_KOMPUTER\login i poprawne hasło.

      -Gdybyś był zalogowany lokalnie na swoim komputerze kontem np „Tomek” i nie podał w poleceniu loginu i hasła za pomocą -u i -p, to oczywiście nie zrestartujesz zdalnego komputera, bo zdalny komputer zna tylko swoich lokalnych użytkowników i użytkownika „Tomek” nie zautoryzuje.

      …ale shutdown.exe ma pewną „dziurę”:

      -Gdybyś miał na swoim komputerze i zdalnym komputerze identycznego użytkownika lokalnego i identyczne hasło (to bardzo zła praktyka…) i na tym zdalnym komputerze użytkownik byłby adminem, to mógłbyś go zrestartować (nie podajac nawe -u -p w poleceniu). Gdyby nie był adminem, zobaczyłbyś błąd „Make sure the Admin$ share is enabled” lub podobny.

      -psshutdown.exe jest nieco mądrzejszy – , jeśli nie podasz poświadczeń -u:\\ZDALNY_KOMPUTER\login to nie pozwoli zrestartować zdalnego komputera nawet jeśli na obu maszynach masz identyczne konta i hasła.

      W DOMENIE:

      -Zarówn przy shutdown.exe jak i psshutdown użytkonik, który należy do lokalnych adminów lub „Power Users” na komputerach może zrestartować te komputery nie podając hasła przez parametry -u -p. Login i Hasło będa po prostu takie same, jak konto, które uruchomiło CMD.

      -Serwery mogą restartować tylko administartorzy lub członkowie „Server Operators”.

      Mozna to zmienić grzebiąc w Local Group Policy lub Group Policy Object w polityce:
      Computer Configuration\Policies\Windows Settings\Security Settings\Local Policies\User Rights assignment.

  2. Anonim napisał(a):

    rozumiem, dzięki!
    A bloga czytam, bardzo mi się przydaje w pracy.

  3. Anonim napisał(a):

    Witam.
    Mam następujący problem z poleceniem shutdown.
    Dwa komputery jeden z WinXP, drugi z Win7.
    Na obu są te same konta z tymi samymi hasłami.
    Jak próbuje z poziomu Win7 zamknąć WinXP to otrzymuję komunikat ‚Odmowa dostępu (5)”.
    Jak na komputerze z XP w Ustawieniach zabezpieczeń lokalnych dla zasady „Wymuszanie zamknięcia systemu z systemu zdalnego” dodam konto Gościa, to wszystko działa prawidłowo.
    Czy da się jakoś zmusić XP, do zdalnego zamknięcia, bez nadawania praw dla konta Gość ?
    Pozdrawiam.
    RafaK.

  4. Jakub napisał(a):

    Witam, jak wiadomo psshutdown nie wspolpracuje najlepiej z Windows 7 a dokladniej mowiac nie wyswietla okna z odliczaniem i opcja anulowania dla uzytkownika. Czy znasz moze jakies podobne rozwiazanie ktore moglbym zastosowac w Win 7?

    • Łukasz Skalikow napisał(a):

      Niestety to jest problem, który od ładnych paru lat irytuje wiele osób, i jakoś nie doczekaliśmy się jeszcze nowej wersji psshutdown.exe, która rozwiąże ten problem. Natywny shutdown.exe nie ma tego problemu i wydaje się być jedynym rozwiązaniem dla Ciebie – ale zdaję sobie sprawę, że nie jest taki wszechstronny jak psshutdown.exe i pewnie nie bez powodu zależy Ci na nim.

      Może ktoś z naszych czytelników dorzuci jakiś konstruktywny komentarz.

  5. Jacek napisał(a):

    Witam.
    Zacząłem szukać jakiegoś rozwiązania na nieposłusznych usersów i wujek googel zaprowadził mnie tu. mam pytanie jak zainstalować te toolsy? rejestrować je jakoś czy co? odpalać z konkretnej lokalizacji?
    Np. ten najbardziej mnie interesujący psshutdown.exe.

    • Dariusz Góra napisał(a):

      Nie trzeba ich instalować. Wystarczy ściągnąć z lokalizacji, o której pisał Łukasz, rozpakować do któregoś z katalogów zmiennej path (komenda PATH w CMD) lub dodać jakiś nowy (PATH {nowa ścieżka};%PATH%). Wtedy będziesz mógł uruchamiać psshutdown wpisując w CMD z jakiejkolwiek lokalizacji.

      Swoją drogą ciekawy sposób na karanie użytkowników, moi by się ucieszyli gdyby nie musieli pracować ;P

    • Jacek napisał(a):

      Osz… ale pomroczność jasna mnie dopadła. To logiczne, nawet łatwiej skopiować folder z pliczkami na c:\ i potem cmd wejść do tegoż folderu i z jego poziomu wydawać komendy. Dobrze rozumiem?

    • Piotr Berent napisał(a):

      Dokładnie.

    • Jacek napisał(a):

      Dzięki za bezcenne porady jutro przećwiczę.

  6. Szymon napisał(a):

    Rozumiem, że zamiast nazwy komputera w mojej sieci domowej mogę podać jego IP

Dodaj komentarz