我无法将 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}
而不是第二个脚本文件,它运行良好。我想我只能用这种方法了。