Bármely PowerShell-parancsfájlból elkészíthet egy Windows szolgáltatást, amely a háttérben fut és automatikusan elindul, amikor a kiszolgáló elindul. A srvany.exe és az instsrv.exe segédprogramok segítségével (a Windows Server Resource 2003 készletben szerepel) létrehozhat egy Windows szolgáltatást, amely lehetővé teszi a powershell.exe folyamat elindítását egy paraméterrel a ps1 parancsfájl elérési útjának formájában. A szolgáltatás létrehozásának ezen módszerének fő hátránya, hogy az srvany.exe nem ellenőrzi az alkalmazás végrehajtását (a mi esetünkben a PowerShell szkript), és ha az alkalmazás összeomlik (lefagy), a szolgáltatás ezt nem látja, és továbbra is működik. Ebben a cikkben a segédprogram segítségével Windows-szolgáltatást hozunk létre egy PowerShell-parancsfájlt tartalmazó fájlból NSSM (Nem szoptató szolgáltató menedzser - fordítás nélkül hagyja ... :)), amely nem rendelkezik ezekkel a hiányosságokkal.
Az NSSM-et letöltheti és telepítheti manuálisan vagy a Chocolately segítségével. Először maga a Choco-t kell telepítenie:
Set-ExecutionPolicy Bypass -Scope Process -Force; '
iex ((New-Object System.Net.WebClient) .DownloadString ('https://chocolatey.org/install.ps1'))
Ezután telepítse az NSSM csomagot:
choco install nssm
Ebben a példában valós időben figyeljük egy adott AD-csoportban bekövetkező változásokat (a cikkből származó szkript), és értesítjük a biztonsági rendszergazdát egy felbukkanó értesítéssel és betűvel, amikor megváltoztatjuk.
Tehát van egy kódunk, amelyet el kell menteni egy PS1 fájlba. Adjon hozzá egy végtelen ciklust, amely percenként egyszer ellenőrzi:
míg ($ true)
# Az Ön PS-kódja
Start-Sleep-Seconds 60
Szolgáltatást létrehozhat egy PowerShell-parancsfájlból, az NSSM segítségével, közvetlenül a PowerShell-ből :):
$ NSSMPath = (Get-Command "C: \ tools \ nssm \ win64 \ nssm.exe"). Forrás
$ NewServiceName = “CheckADGroupSrv”
$ PoShPath = (Get-Command powershell). Forrás
$ PoShScriptPath = “C: \ tools \ CheckADGroup \ checkad.ps1”
$ args = '-ExecutionPolicy Bypass -NoProfile -File "0"' -f $ PoShScriptPath
& $ NSSMPath telepíti a $ NewServiceName $ PoShPath $ args fájlt
& $ NSSMPath állapot $ NewServiceName
Futtassa az új szolgáltatást:
Start-Service $ NewServiceName
Ellenőrizze a szolgáltatás állapotát a PowerShell használatával:
Get-Service $ NewServiceName
Tehát létrehozott és elindított egy új Windows szolgáltatást. Ellenőrizze, hogy megjelenik-e a services.msc szolgáltatáskezelő konzolban
A CheckADGroupSrv szolgáltatás valóban megjelent, automatikusan elindulva van beállítva és jelenleg fut (fut). Mint láthatja, a PowerShell szkript az nssm.exe folyamaton belül fut.
Felhívjuk figyelmét, hogy a szolgáltatás a rendszerfiók alatt fut. Ha más modulokat használ a PS parancsfájljaiban (esetemben a tartományi biztonsági csoport összetételének megszerzéséhez a Windows PowerShell Active Directory moduljának Get-ADGroupMember parancsmagját használjuk), ennek a fióknak hozzáféréssel kell rendelkeznie a modul fájlokhoz és az AD-hez való kapcsolódáshoz ( eset). Ezt a szolgáltatást egy másik fiókkal (vagy gMSA-fiókkal) is elindíthatja, és feljogosíthatja a felhasználókat a szolgáltatás leállítására / újraindítására, ha nincs helyi rendszergazdai jog..Annak érdekében, hogy a szolgáltatás értesítéseket jelenítsen meg egy felhasználói munkamenetben (interakcióba léphet az asztallal), a „Belépés”(Bejelentkezés) engedélyezze a„Engedélyezze az asztali interakciót”(Engedélyezi a szolgáltatásnak az asztali kapcsolatba lépését).
Ahhoz, hogy ez működjön a Windows 10 / Windows Server 2012 R2 / 2016 rendszerben, meg kell változtatnia a regisztrációs paraméter DWORD értékét NoInteractiveServices a HKLM \ System \ CurrentControlSet \ Control \ Windows ágban 0 és engedélyezze az interaktív szolgáltatások böngésző szolgáltatását (Interaktív szolgáltatások észlelési szolgáltatása):Start-Service -Name ui0detect
A Windows 10 1803 rendszerben azonban az interaktív szolgáltatások észlelési szolgáltatását teljesen eltávolították a rendszerből, és már nem válthat át a nulla munkamenetre (0. munkamenet), így egyszerűen nem fogja látni a rendszerfiók alatt megjelenő ablakokat..
A szolgáltatás leírását a következő paranccsal módosíthatja:
& $ NSSMPath set $ NewServiceName leírása “Az AD-csoport változásának figyelése”
A létrehozott szolgáltatás törléséhez használhatja a sc delete parancsot vagy
nssm eltávolítani CheckADGroupSrv