Z jakéhokoli skriptu PowerShell můžete vytvořit službu Windows, která běží na pozadí a po spuštění serveru se spustí automaticky. Službu Windows můžete vytvořit pomocí obslužných programů srvany.exe a instsrv.exe (součástí sady Windows Server Resource 2003 Kit), což vám umožní spustit proces powershell.exe s parametrem ve formě cesty k souboru skriptu ps1. Hlavní nevýhoda této metody vytváření služby je v tom, že srvany.exe nekontroluje provádění aplikace (skript PowerShell v našem případě), a pokud aplikace havaruje (zamrzne), služba to nevidí a pokračuje v práci. V tomto článku použijeme tento nástroj k vytvoření služby Windows ze souboru se skriptem PowerShell Nssm (Non-Sucking Service Manager - odejít bez překladu ... :)), který postrádá tyto nedostatky.
NSSM si můžete stáhnout a nainstalovat ručně nebo pomocí Chocolately. Nejprve musíte nainstalovat Choco sám:
Set-ExecutionPolicy Bypass -Scope Process -Force; ''
iex ((New-Object System.Net.WebClient) .DownloadString ('https://chocolatey.org/install.ps1'))
Pak nainstalujte balíček NSSM:
choco install nssm
V tomto příkladu budeme sledovat změny v konkrétní skupině AD v reálném čase (skript z tohoto článku) a oznámíme správci zabezpečení vyskakovacím oznámením a dopisem při změně.
Máme tedy kód, který je třeba uložit do souboru PS1. Přidejte nekonečnou smyčku, která provádí kontrolu jednou za minutu:
while ($ true)
# Váš PS kód
Start-Sleep-Seconds 60
Službu můžete vytvořit ze skriptu PowerShell pomocí NSSM přímo z PowerShell :):
$ NSSMPath = (Get-Command "C: \ tools \ nssm \ win64 \ nssm.exe"). Zdroj
$ NewServiceName = “CheckADGroupSrv”
$ PoShPath = (Získat-Command powerhell). Zdroj
$ PoShScriptPath = “C: \ tools \ CheckADGroup \ checkad.ps1”
$ args = '-ExecutionPolicy Bypass -NoProfile -File "0"' -f $ PoShScriptPath
& $ NSSMPath nainstalovat $ NewServiceName $ PoShPath $ args
& $ NSSMPath status $ NewServiceName
Spusťte novou službu:
Start-Service $ NewServiceName
Zkontrolujte stav služby pomocí PowerShell:
Získejte službu $ NewServiceName
Vytvořili jste a spustili novou službu systému Windows. Ověřte, že se objeví v konzole pro správu služeb services.msc
Služba CheckADGroupSrv se skutečně objevila, je nakonfigurována tak, aby se spouštěla automaticky a právě běží (běží). Jak vidíte, váš skript PowerShell běží uvnitř procesu nssm.exe.
Upozorňujeme, že služba je spuštěna v rámci systémového účtu. Používáte-li ve svých skriptech PS jiné moduly (v mém případě se k získání složení skupiny zabezpečení domény používá cmdlet Get-ADGroupMember z modulu Active Directory pro Windows PowerShell), musí mít tento účet přístup k souborům modulu a práva pro připojení k AD (v mém případ). Tuto službu můžete také spustit pod jiným účtem (nebo účtem gMSA) a dát uživatelům právo zastavit / restartovat službu, pokud nemají práva místního správce.Chcete-li, aby služba zobrazovala oznámení v uživatelské relaci (interagovala s desktopem), musíte na „Přihlášení”(Přihlásit se) povolit“Povolit interakci na ploše“(Povolit službě interakci s počítačem).
Aby to fungovalo v systému Windows 10 / Windows Server 2012 R2 / 2016, musíte změnit hodnotu DWORD parametru registru NoInteractiveServices ve větvi HKLM \ System \ CurrentControlSet \ Control \ Windows 0 a povolit službu prohlížeče interaktivních služeb (Služba detekce interaktivních služeb):Start-Service - jméno ui0detect
V systému Windows 10 1803 však byla služba detekce interaktivních služeb ze systému zcela odstraněna a vy již nemůžete přepnout na nulu relace (relace 0), takže jednoduše neuvidíte okna, která se zobrazí pod účtem Systém..
Popis služby můžete změnit příkazem:
& $ NSSMPath set $ NewServiceName description „Sledování změn ve skupině AD“
Pro smazání vytvořené služby můžete použít příkaz sc delete nebo
nssm odebrat CheckADGroupSrv