我编写了一个简单的 powershell 脚本,用于在服务发生故障时触发电子邮件通知并重新启动服务,并且通过使 Windows 音频服务器(“Audiosrv”)崩溃在我的桌面上对其进行测试。
该脚本的运行设置为进入服务->右键单击服务->属性->恢复->第一次/第二次/后续故障->运行程序,程序参数如下所列。
本地服务帐户 (NT AUTHORITY\LOCAL SERVICE) 在服务失败时运行此脚本,这可以通过脚本期间的 whoami 命令输出得知。此帐户可以使用 Send-MailMessage cmdlet(我收到电子邮件),但不能使用 Restart-Service cmdlet(或 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 = "[email protected]"
$toAddress = "[email protected]"
$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