2017-07-04 76 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*"} 
相關問題