2017-07-04 79 views
1

所以我一直在研究一个脚本,当一个服务失败时本质上发送一封电子邮件。该脚本工作得很好,因为我从PowerShell手动运行它。我收到了电子邮件,并且所有内容都被检出 我再加入到服务: Service Recovery Options在Windows服务失败时运行Powershell脚本。在手动运行时运行,但在服务失败时运行。需要的建议

我告诉它通过链接到可执行文件运行PowerShell的:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe 

而执行下面的脚本:

-command C:\Users\andreand\Desktop\Sendmail.ps1 

如前所述,我在PowerShell中手动尝试了这一点,并且出现错误。如果我在-command之前附加了PowerShell位置,它将起作用。像这样:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command C:\Users\andreand\Desktop\Sendmail.ps1 

所以这个工程,如果我手动运行它,但是当服务失败时,什么都不会发生。 我通过执行/taskkill /F /PID pid来触发失败,并且我可以看到服务已停止。

我错过了什么?我觉得我如此亲密,令人沮丧!

+0

检查系统事件日志以查看您的恢复脚本是否已执行。我还假设脚本作为服务的用户上下文运行,因此您可能需要检查该用户是否可以成功运行该脚本。 –

+0

正确的做到了这一点。出现错误意味着服务意外终止,并且“纠正措施将在0毫秒内完成;运行已配置的恢复程序”。查看事件查看器的Powershell选项卡我可以看到Powershell似乎也开始了。我已经将PowerShell中的执行策略设置为RemoteSigned,所以脚本应该可以运行。 – Andreas

+0

听起来像是试图执行它。你有没有检查它是否有用户上下文问题? –

回答

0

正如Mark Wragg在这里所建议的,问题在于我用一个用户帐户加密了字符串,但试图用另一个用户帐户解密。通过不使用密码加密,它可以工作。

我仍然试图找出是否有任何方法来保持加密,并有这项工作。

此外,我现在试图在电子邮件主题字段中嵌入失败的服务,但我不确定如何执行此操作。我已经看到了Get-Service Cmdlet,但似乎取得了一个完整的列表,我只需要它来读取失败的服务。任何对此的帮助是最受欢迎的。

编辑:我现在已经找到了加密密码和检索服务列表的解决方案。 要加密密码,我使用了一个加密密钥。它是这样的:

# Change this location as necessary. 
PS C:\Users\andreand> $File = 'C:\SomeLocation\Key.txt' 

PS C:\Users\andreand> [Byte[]] $Key = (1..16) 

# The password for the mail account/SMTP client. 
PS C:\Users\andreand> $Password = 'Passwordgoeshere' | ConvertTo-SecureString -AsPlainText -Force 

PS C:\Users\andreand> $Password | ConvertFrom-SecureString -Key $Key | Out-File 
$File 

在此之后,我输入以下到我的脚本来获取加密的密钥:

$File = 'C:\SomeLocation\Key.txt' 
[Byte[]] $Key = (1..16) 
$Password = Get-Content $File | ConvertTo-SecureString -Key $Key 

用于检索服务列表中,我用得到,服务小命令,但有一些过滤来找到我想要的服务。像这样:

$Services = Get-Service | Where-Object {$_.DisplayName -like "ServiceName*"} 
相关问题