Vamos a crear un servicio real de Windows con PowerShell que se ejecute en segundo plano y escriba un registro cada vez que se inicia. Así podrás aprender a crear, iniciar, detener y eliminar servicios de Windows.
1. Abrir PowerShell como administrador
Haz clic derecho en el menú Inicio y selecciona Terminal (Administrador) o PowerShell (Administrador).
2. Crear el programa del servicio
Windows no permite registrar directamente cualquier script de PowerShell como servicio nativo. Para esta práctica utilizaremos un servicio de Windows que ejecuta un programa en segundo plano.
La opción más sencilla es utilizar NSSM (Non-Sucking Service Manager), una herramienta que permite ejecutar programas como servicios.
Descarga NSSM desde su página oficial: https://nssm.cc/download
Descomprime el archivo y localiza nssm.exe, por ejemplo, en C:\nssm\win64\nssm.exe.
3. Crear un script de PowerShell
Ejecuta estos comandos para crear un script que escriba la fecha y la hora en un archivo de registro cada minuto:
New-Item -Path "C:\MiServicio" -ItemType Directory -Force
@'
while ($true) {
$fecha = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
Add-Content -Path "C:\MiServicio\servicio.log" `
-Value "$fecha - Servicio en ejecución"
Start-Sleep -Seconds 60
}
'@ | Set-Content -Path "C:\MiServicio\servicio.ps1" -Encoding UTF8
4. Registrar el servicio
Adapta la ruta de nssm.exe si lo has guardado en otra carpeta:
C:\nssm\win64\nssm.exe install MiServicioPowerShell "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
Se abrirá la ventana de configuración de NSSM. En el campo Arguments, introduce:
-NoProfile -ExecutionPolicy Bypass -File "C:\MiServicio\servicio.ps1"
Pulsa Install service.
5. Iniciar el servicio
Start-Service -Name MiServicioPowerShell
Comprueba su estado:
Get-Service -Name MiServicioPowerShell
Debería aparecer como Running.
6. Comprobar que funciona
Espera aproximadamente un minuto y ejecuta:
Get-Content "C:\MiServicio\servicio.log" -Tail 10
Verás las marcas de tiempo que va escribiendo el servicio.
7. Detener, iniciar y eliminar el servicio
Detener el servicio
Stop-Service -Name MiServicioPowerShell
Volver a iniciarlo
Start-Service -Name MiServicioPowerShell
Eliminarlo
Stop-Service -Name MiServicioPowerShell -ErrorAction SilentlyContinue
C:\nssm\win64\nssm.exe remove MiServicioPowerShell confirm