Generic/NSSM.ps1
function New-NssmService { [CmdletBinding()] param( [Parameter(Mandatory=$true)] [string] $ServiceName, [Parameter(Mandatory=$true)] [string] $ExecutablePath, [Parameter(Mandatory=$false)] [string] $Arguments = "", [Parameter(Mandatory=$false)] [string] $WorkingDirectory = "", [Parameter(Mandatory=$false)] [int] $RestartDelayMs = 5000, [Parameter(Mandatory=$false)] [string] $StdOutLog = "", [Parameter(Mandatory=$false)] [string] $StdErrLog = "", [Parameter(Mandatory=$false)] [bool] $Rotate = $true, [Parameter(Mandatory=$false)] [int] $RotateBytes = 10000000, [Parameter(Mandatory=$false)] [switch] $Start = $false ) # 1) Установка службы nssm install $ServiceName $ExecutablePath # 2) Параметры запуска if ($Arguments) { nssm set $ServiceName AppParameters $Arguments } # 3) Рабочая директория if ($WorkingDirectory) { nssm set $ServiceName AppDirectory $WorkingDirectory } # 4) Автоматический запуск nssm set $ServiceName Start SERVICE_AUTO_START # 5) Перезапуск при сбое if ($RestartDelayMs -gt 0) { nssm set $ServiceName AppRestartDelay $RestartDelayMs } # 6) Логи stdout/stderr if ($StdOutLog) { nssm set $ServiceName AppStdout $StdOutLog } if ($StdErrLog) { nssm set $ServiceName AppStderr $StdErrLog } if ($Rotate) { nssm set $ServiceName AppRotateFiles 1 } nssm set $ServiceName AppRotateBytes $RotateBytes # 7) Запуск службы try { if ($Start) { Start-Service $ServiceName -ErrorAction Stop Write-Host "Service '$ServiceName was created and running." } } catch { Write-Warning "Service '$ServiceName' created, but not started automatically: $_" } } |