在Windows服务失败时运行Powershell脚本。在手动运行时工作,但在服务失败时不工作。需要的建议

时间:2017-07-04 09:14:12

标签: windows powershell email

所以我一直在编写一个脚本,以便在服务失败时发送电子邮件。该脚本工作正常,因为我从PowerShell手动运行它。我收到了电子邮件,一切都结束了。 然后我将其添加到服务中: Service Recovery Options

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

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

执行以下脚本:

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

如前所述,我在PowerShell中手动尝试了这个,但是出现了错误。如果我在命令之前附加PowerShell位置它可以工作。像这样:

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

所以如果我手动运行它会有效,但是当服务失败时,没有任何反应。 我通过执行/taskkill /F /PID pid来触发失败,我可以看到服务已停止。

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

1 个答案:

答案 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

为了检索服务列表,我使用了Get-Service cmdlet,但是通过一些过滤来查找我想要的服务。像这样:

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