Я написал простой сценарий PowerShell для запуска уведомления по электронной почте и перезапуска службы при возникновении сбоя службы и тестировал его на своем рабочем столе путем сбоя сервера Windows Audio («Audiosrv»).
Сценарий настраивается для запуска, перейдя в Службы -> щелкните правой кнопкой мыши службу -> Свойства -> Восстановление -> Первые / вторые / последующие сбои -> Запустить программу с параметрами программы, перечисленными ниже.
Учетная запись локальной службы (NT AUTHORITY \ LOCAL SERVICE) запускает этот сценарий при сбое службы, это известно из вывода команды whoami во время выполнения сценария. Эта учетная запись может использовать командлет Send-MailMessage (я получаю электронное письмо), но не может использовать командлет Restart-Service (или Start-Service, или net start, или sc start?). См. Сообщение об ошибке, это то же сообщение об ошибке, полученное при попытке запустить Restart-Service от имени пользователя без прав администратора.
Как я могу временно повысить привилегии, чтобы этот сценарий мог перезапустить службу? Или что мне по другому сделать?
Запустить программу:
C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe
Параметры командной строки:
-File C:\Scripts\StoppedServiceNotifyEmail.ps1
Скрипт Powershell (адреса электронной почты / имена хостов отредактированы):
$serviceName = "Audiosrv"
$serviceDisplayName = "Windows Audio"
$fromAddress = "xxxx@xxxxxxxxx.org"
$toAddress = "xxxx@xxxxxxxxx.org"
$initialFailedBody=@"
<head>
<style type='text/css'>
body {
font-family: Calibri;
font-size: 11pt;
color: black;
}
</style>
</head>
<body>
<p>$serviceDisplayName ($serviceName) on $env:computername has failed, attempting to restart the service.</p>
</body>
"@
whoami | Out-File -FilePath C:\Scripts\whoami_after_Audiosrv_fail.txt
Send-MailMessage -smtpServer xxxxxxxxxxxxx -Port xxx -from $fromAddress -to $toAddress -subject "$serviceDisplayName ($serviceName) failed on $env:computername" -body $initialFailedBody -BodyAsHTML -priority High
Start-Sleep -s 10
Restart-Service -Name $serviceName
Вывод ошибок Powershell:
Restart-Service : Service 'Windows Audio (Audiosrv)' cannot be stopped due to the following
error: Cannot open Audiosrv service on computer '.'.
At C:\Util\StoppedServiceNotifyEmail.ps1:82 char:5
+ Restart-Service -Name $serviceName
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : CloseError: (System.ServiceProcess.ServiceController:ServiceControl
ler) [Restart-Service], ServiceCommandException
+ FullyQualifiedErrorId : CouldNotStopService,Microsoft.PowerShell.Commands.RestartServiceCom
mand