Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

Zrestartuj komputer i kontynuuj skrypt

Czasami bywa tak, że działania wykonywane przez nas wymagają restartu komputera. Systemy Windows Server z założenia nie powinny być restartowane jednak instalacja pewnych głównych modułów (Active Directory itp.) wymaga restartu. W przypadku maszyn klienckich może to być dla przykładu wpięcie hosta do domeny. A co jeśli chcemy napisać skrypt, który gdzieś w środku swojego działania będzie wymagał restartu komputera?
Zadanie można wykonać w prosty sposób.
1. Dzielimy nasz skrypt na 2 pliki. Pierwszy skrypt kończy się restartem komputera a drugi wykonuje to, co powinniśmy wykonać po restarcie.
2. Prosimy Pana Windowsa o wykonanie drugiego skryptu podczas ponownego uruchamiania się systemu (dokładniej to podczas pierwszego logowania po restarcie)
3. Restartujemy

Jest taki klucz rejestru systemowego, z którego system pobiera wszystkie wpisy przy starcie systemu, wykonuje je i usuwa z tej listy. Pozwala to na jednorazowe uruchomienie aplikacji(często tak robią różne instalatory oprogramowania).
Zwie się on:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceNaszym zadaniem więc jest dodanie do tego klucza wpisu, który odpali nam drugi skrypt.

Przy okazji trzeba poruszyć kwestię dostępu do rejestru w Powershell'u. Działa to na takiej samej zasadzie jak dostęp do partycji. Można przeglądać klucze tak samo jak katalogi , dzięki czemu zaciera się różnica pomiędzy zbiorami danych.
Przykładowe komendy:Aby wejść do rejestru systemu wykonujemy polecenie Set-Locatiom hklm: albo krócej cd hklm: Za pomocą tych komend możemy także wejść do poszczególnych węzłów cd Software Możemy wylistować zawartość węzła Get-Childitem Albo krócej dir Jeszcze krócej ls

Wracamy do meritum. Wpis dodajemy poleceniem:New-ItemProperty -Path 'HKLM:\Software\Microsoft\Windows\CurrentVersion\RunOnce' -Name "jakas_nazwa" -Value "sciezka\do\powershell.exe -File D:\dir\scriptname.ps1" Mamy wszystko co potrzeba, piszemy zatem skrypt (kodujemy/kodzimy/skrytpujemy niepotrzebne skreślić)
Trochę problemów sprawia przekazanie do wykonania bloku poleceń. Musi on być w nawiasach klamrowych oraz być poprzedzony ampersandem '&'function Continue-AfterRestart{ param( [string]$Path, [ScriptBlock]$Scriptblock, [switch]$Restart ) try{ if($Path) { if(Test-Path $Path){ New-ItemProperty -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\RunOnce" -Name "ScriptContinuation" -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File $Path" | Out-Null } } elseif($Scriptblock){ New-ItemProperty -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\RunOnce" -Name "ScriptContinuation" -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command `"& `{$Scriptblock`}`"" | Out-Null } else{ Write-Host "An error occured. Please verify given parameters" Return } }catch{ Write-Host "An error occured. Please verify given parameters" Return } if($Restart){Restart-Computer} }Przykład użyciaContinue-AfterRestart -Path "C:\Script\scrip2.ps1" -Restart Continue-AfterRestart -Scriptblock {Read-Host "Echo"}Można zamiast hklm użyć hkcu. Skrypt także się wykona po restarcie, ale tylko wtedy, gdy zaloguje się ten sam użytkownik, który dodawał wpis.
 

windows inne

Komentarze

0 nowych
necovsky   2 #1 22.04.2011 23:50

A ja zadam takie pytanie z innej beczki, kto używa Windows Server na serwerach jak jest Linux ? :)
Przepraszam za Ot.

  #2 23.04.2011 00:07

@necovsky
Dobreprogramy, TechIT, Gamikaze - coś mi umknęło?

  #3 23.04.2011 00:46

@necovsky
Chociażby dobreprogramy.pl ;) Nie wszystkie rozwiązania sieciowe ma Linux i vice versa. Każdemu co jego, Windows Server też jest używany.

webnull   9 #4 23.04.2011 00:47

I po co restartować cały system? Nie można zrestartować pojedynczych usług jak w Linuksie?

np. /etc/init.d/ssh restart i po sprawie.

Saracen   6 #5 23.04.2011 10:53

@necovsky: ja.
@webnull: można: net stop / net start

Poza tym określnie "z założenia nie powinny być restartowane" nie jest zbyt trafne. Bo dlaczego nie powinny? Po prostu nie robi się tego często, bo serwery najczęściej non stop świadczą jakieś usługi.

StawikPiast   10 #6 23.04.2011 12:09

@necovsky

Przejdz sie po firmach i spytaj sie czemu uzywaja WS a nie Linuxa. Mozesz o tym napisac nawet jakiś wpis na blogu.

adam993   4 #7 23.04.2011 19:32

A ActiveDirectory to co? Dlatego panuje Windows Server. Łatwiej jest stworzyć sieć opartą na Windowsach niż mieszać różne rozwiązania i systemy.

Jakoś niewiele osób zna eDirectory (Novell), które bije ActiveDirectory wydajnością, stabilnością i bezpieczeństwem.

necovsky   2 #8 24.04.2011 00:32

Dobreprogramy, TechIT, Gamikaze jest w partnerstwie z MS więc muszą.
Firmy, które używają MS Windows Server to raczej firmy, które są w partnerstwach z MS albo potrzebują serwerów do niektórych zastosowań sieciowych jak napisał neonesis93.

roobal   14 #9 24.04.2011 01:54

@necovosky

"Dobreprogramy, TechIT, Gamikaze jest w partnerstwie z MS więc muszą."

Rozumiem, że redakcja do używania Vyatty (routera opartego na Debianie GNU/Linux) również jest zmuszona jakaś lojalką do używania akurat tego systemu, a nie innego, np. m0n0wall?

Wracając do tematu, w chwili obecne na laptopie mam zainstalowany Windows Server 2008 i dziwi mnie, że co aktualizację systemu wymagany jest restart systemu szczególnie w przypadku edycji serwerowej, gdzie w przypadku systemów opartych na jądrze Linux, aktualizacja jądra w ogóle nie wymaga restartu, jądro wystarczy tylko przeładować i serwer może działać bez przerwy 365 w roku.

Pozdrawiam!

Saracen   6 #10 25.04.2011 17:20

"Firmy, które używają MS Windows Server to raczej firmy, które są w partnerstwach z MS"

A co to ma do rzeczy? Microsoft płaci im wtedy za używanie Windows czy jak?
Zapytaj np. niemiecki MSZ dlaczego wraca z Linuxa do Windows.
(odpowiedź: http://osnews.pl/niemieckie-msz-wraca-do-windows/)

tfl   8 #11 25.04.2011 18:49

@necovosky

Mam nieodparte wrazenie, ze portal dobreprogramy.pl jest naszpikowany osobami, ktore swoje doswiadczenie z siecia zdobywali w liceach i gimnazjach, gdzie pan od fizyki nauczal jak to fajne sa linuxy, uczyl komendy who i whoami, oraz pokazywal jak uruchomic KDE, tylko dlatego, ze szkoly nie bylo stac na odpowiednie licencje windows i win server. Tymczasem rzeczywistosc jest zupelnie inne. Kazda szanujaca sie firma, otwarta na kontakt z klientami z zewnatrz woli wylozyc te kilka setek wiecej na systemy desktopowe i pakiety biurowe i raz kilka tysiow wiecej na system operacyjny, ktory pozwoli na postawienie ad, dns, dhcp i bog wie co jeszcze na jednym serwerze, ktorego nie bedzie musial konfigurowac chlopiec w rozciagnietym swetrze, komunikujacy sie ze swiatem zewnetrznym w sposob cokolwiek niezrozumialy.

@webnull

Probuje sobie przypomniec, ktore uslugi instalowane na serwerze windows server 2003/2008 wymagaja restartu serwera... do glowy przychodzi mi tylko i wylacznie AD. Dlaczego instalacja uslugi ad wymaga restartu systemu? Oczywiscie dlatego, ze wymaga pracy przy pomocy konta w ad, zamiast konta lokalnego,a takze skrajnie zmienia charakter pracy samego serwera. Z drugiej strony... dodanie do konfiguracji dhcp na serwerze windows wylaczenie z poli adresow pojedynczego adresu nie wymaga restartowania ani uslugi ani calego serwera, a na linuxie bez dhcpd restart sie nie obedzie, prawda?