我在將 Powershell 腳本作為計劃任務運行時遇到問題。該腳本遠端登入兩台 Hyper-V 主機,查詢複製狀態並將結果透過電子郵件發送給我。當我手動運行腳本(在 Powershell ISE 中或直接運行腳本)時,該腳本工作正常,但是當我將其作為計劃任務運行時,任務會陷入運行狀態,並且我永遠不會得到結果。
我已經通過將腳本替換為僅將文字文件寫入本地文件夾的腳本來檢查我的計劃任務設定是否正常工作,所以事實並非如此。當我手動運行腳本時,我也以與任務運行時相同的用戶身份登錄,所以事實並非如此,我錯過了什麼?
這是我的腳本:
$array = @("host1.domain.com", "host2.domain.com")
for ($i=0; $i -lt $array.length; $i++) {
$pass = cat C:\Scripts\Creds.txt | convertto-securestring
$mycred = new-object -typename System.Management.Automation.PSCredential -argumentlist "username",$pass
Invoke-Command -ComputerName $array[$i] -Credential $mycred -FilePath "C:\Scripts\Check_VMReplication.ps1"
}
該腳本呼叫同一資料夾中的另一個腳本:
$hstname = Hostname
$Replication = Get-VMReplication
$MessageFail = $hstname + ' Replication Alert'
$SmtpServer = 'smtp.server.com'
hostname > C:\Scripts\iveremoted.txt
for ($i=0; $i -lt $Replication.length; $i++) {
$MessageBody = $hstname+ " has reported a replication status of " + $Replication.health[$i] + ' for server ' + $Replication.name[$i]
$FailMessageSubject = $Replication.name[$i] + " Replication Alert"
if ($Replication.health[$i] -ne 'Normal') {
send-mailmessage -to "[email protected]>" -from '[email protected]' -subject $MessageFail -body $MessageBody -smtpServer $SmtpServer
}
else{
send-mailmessage -to "[email protected]" -from '[email protected]' -subject 'Everything's OK' -body $MessageBody -smtpServer $SmtpServer
}
}
該腳本似乎無法登錄,因為iveremoted.txt 檔案未寫入遠端電腦。
知道我可能錯過了什麼嗎?
答案1
我不知道為什麼,但如果我使用以下命令運行 Check_VMReplication.ps1 程式碼
Invoke-Command -Credential $mycred -ScriptBlock {CODE GOES HERE}
而不是第二個腳本文件,它運作良好。我想我只能這樣做了。