Iz bilo koje PowerShell skripte možete napraviti Windows uslugu koja se pokreće u pozadini i pokreće se automatski kada se poslužitelj pokrene. Windows uslugu možete kreirati pomoću uslužnih programa srvany.exe i instsrv.exe (uključenih u komplet Windows Server Resource 2003 Kit) koji omogućuju pokretanje postupka powershell.exe s parametrom u obliku putanje do datoteke skripte ps1. Glavni nedostatak ove metode stvaranja usluge je da srvany.exe ne kontrolira izvršenje aplikacije (skripta PowerShell u našem slučaju), a ako se aplikacija sruši (zamrzne), usluga to ne vidi i nastavlja s radom. U ovom ćemo članku ovaj uslužni program stvoriti Windows uslugu iz datoteke s PowerShell skriptu NSSM (Voditelj nepodržavajućeg servisa - ostavite bez prijevoda ... :)), što je lišeno ovih nedostataka.
NSSM možete preuzeti i instalirati ručno ili preko Chocolately. Prvo morate sami instalirati Choco:
Set-ExecutionPolicy Bypass -Scope Process -Force; '
iex ((New-Object System.Net.WebClient) .DownloadString ('https://chocolatey.org/install.ps1'))
Zatim instalirajte NSSM paket:
choco instalirati nssm
U ovom ćemo primjeru pratiti promjene u određenoj grupi AD u stvarnom vremenu (skripta iz ovog članka) i obavijestiti administratora sigurnosti pop-up obavijesti i pismom prilikom promjene.
Dakle, imamo kôd koji treba spremiti u PS1 datoteku. Dodajte beskonačnu petlju koja vrši provjeru jednom minutu:
dok je ($ true)
# Vaš PS kod
Početak-spavanje-sekunde 60
Uslugu možete stvoriti iz skripte PowerShell koristeći NSSM izravno iz PowerShell-a :):
$ NSSMPath = (Get-Command "C: \ alati \ nssm \ win64 \ nssm.exe"). Izvor
$ NewServiceName = "CheckADGroupSrv"
$ PoShPath = (Get-Command ovlaštenje). Izvor
$ PoShScriptPath = "C: \ tools \ CheckADGroup \ checkad.ps1"
$ args = '-ExecutionPolicy Bypass -NoProfile -File "0"' -f $ PoShScriptPath
& $ NSSMPath instalira $ NewServiceName $ PoShPath $ args
& $ NSSMPath status $ NewServiceName
Pokrenite novu uslugu:
Start-Service $ NewServiceName
Provjerite status usluge pomoću PowerShell-a:
Dobivanje usluge $ NewServiceName
Dakle, stvorili ste i pokrenuli novu Windows uslugu. Provjerite da li se pojavljuje na konzoli za upravljanje uslugama services.msc
Pojavila se zaista usluga CheckADGroupSrv, konfigurirana je za automatsko pokretanje i trenutno se pokreće (Pokreće). Kao što vidite, vaš PowerShell skripta pokreće se unutar nssm.exe procesa.
Napominjemo da se usluga izvodi pod sistemskim računom. Ako koristite druge module u PS skriptama (u mom slučaju, cmdlet Get-ADGroupMember iz modula Active Directory za Windows PowerShell koristi se za dobivanje sastava grupe sigurnosti domene), ovaj račun mora imati pristup datotekama modula i prava za povezivanje s AD-om (u mom slučaj). Ovu uslugu možete pokrenuti i pod drugim računom (ili gMSA računom) i korisnicima dati pravo da zaustave / ponovno pokrenu uslugu ako nemaju lokalna administrativna prava.Da bi usluga prikazala obavijesti u korisničkoj sesiji (interakcija s radnom površinom), morate na "Logiranje članova"(Prijava) omogućuju"Dopusti interakciju na radnoj površini"(Dopustite usluzi da komunicira sa radnom površinom).
Da bi ovo radilo u sustavu Windows 10 / Windows Server 2012 R2 / 2016, morate promijeniti DWORD vrijednost parametra registra NoInteractiveServices u podružnici HKLM \ System \ CurrentControlSet \ Control \ Windows 0 i omogućiti uslugu preglednika interaktivnih usluga (Služba za otkrivanje interaktivnih usluga):Start-Service -Name ui0detect
No, u sustavu Windows 10 1803 usluga Interaktivne usluge otkrivanja potpuno je uklonjena iz sustava i više se ne možete prebaciti na nulu sesije (sesija 0), tako da jednostavno nećete vidjeti prozore koji su prikazani pod sistemskim računom.
Opis usluge možete promijeniti naredbom:
& $ NSSMPath set $ NewServiceName opis "Nadgledanje promjena AD grupe"
Za brisanje stvorene usluge možete upotrijebiti naredbu sc delete ili
nssm ukloni CheckADGroupSrv