Cualquier script de PowerShell se puede transformar en un servicio real de Windows que se ejecuta en segundo plano y se inicia automáticamente durante el arranque del servidor.. Puede crear un servicio de Windows usando srvany.exe o instsrv.exe herramientas (del Kit de recursos de Windows Server 2003) que le permiten ejecutar el powershell.exe proceso con un parámetro que contiene la ruta a su archivo de script PS1.
La principal desventaja de crear un servicio con este método es que srvany.exe no controla el estado de ejecución de un script de PowerShell, y si la aplicación falla (cuelga), el servicio no la ve y sigue funcionando. Para crear un servicio de Windows a partir de un archivo que contiene un script de PowerShell, en este artículo usaremos el NSSM (Administrador de servicios no chupadores), que no demuestra las desventajas mencionadas anteriormente.
Puede descargar e instalar NSSM manualmente o usando Chocolatey. En primer lugar, instale Choco en sí:
Set-ExecutionPolicy Bypass -Scope Process -Force; `
iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
Luego instale el paquete NSSM:
choco install nssm
En este ejemplo, realizaremos un seguimiento de los cambios en un grupo específico de Active Directory en tiempo real e informaremos a un administrador de seguridad mediante una notificación emergente y un correo electrónico (la secuencia de comandos se proporciona en este artículo).
Entonces, tenemos un código de PowerShell que debe guardarse como un archivo PS1. Agreguemos un bucle infinito que realiza una verificación cada minuto:
while($true) {
#Your PS code
Start-Sleep –Seconds 60
}
Puede crear un servicio desde un script de PowerShell usando NSSM directamente desde PowerShell:
$NSSMPath = (Get-Command "C:psnssmwin64nssm.exe").Source
$NewServiceName = “CheckADGroup”
$PoShPath= (Get-Command powershell).Source
$PoShScriptPath = “C:psCheckADGroupcheckad.ps1”
$args="-ExecutionPolicy Bypass -NoProfile -File "{0}"" -f $PoShScriptPath
& $NSSMPath install $NewServiceName $PoShPath $args
& $NSSMPath status $NewServiceName
Inicie su nuevo servicio:
Start-Service $NewServiceName
Verifique el estado del servicio en PowerShell:
Get-Service $NewServiceName
Así que ha creado e iniciado su nuevo servicio de Windows. Asegúrese de que haya aparecido en la consola de administración de servicios (services.msc).
CheckADGroup ha aparecido, está configurado para iniciarse automáticamente y se está ejecutando actualmente. Como puede ver, su secuencia de comandos de PowerShell se ejecuta dentro del proceso nssm.exe.
Para que el servicio pueda mostrar notificaciones en una sesión de usuario, habilite el Permitir que el servicio interactúe con el escritorio opción en el Acceder pestaña.
Start-Service -Name ui0detect
Sin embargo, el Servicio de detección de servicios interactivos se eliminó por completo de la compilación 1803 de Windows 10 y no podrá cambiar a la Sesión 0. Por lo tanto, no verá las ventanas de notificación que se muestran en Cuenta del sistema.
Puede cambiar la descripción del servicio usando este comando:
& $NSSMPath set $NewServiceName description “Monitoring of AD group changes”
Para eliminar el servicio que ha creado, utilice el sc delete comando o:
nssm remove CheckADGroup




