У меня проблемы с запуском сценария 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 "mail@address.com>" -from 'frommail@address.com' -subject $MessageFail -body $MessageBody -smtpServer $SmtpServer
}
else{
send-mailmessage -to "mail@address.com" -from 'frommail@address.com' -subject 'Everything's OK' -body $MessageBody -smtpServer $SmtpServer
}
}
Скрипт не может войти в систему, потому что файл iveremoted.txt не записывается на удаленный компьютер.
Есть идеи, что я мог пропустить?
Не знаю почему, но если я запустил код Check_VMReplication.ps1, используя
Invoke-Command -Credential $mycred -ScriptBlock {CODE GOES HERE}
вместо второго файла сценария он работает нормально. Думаю, мне просто придется так поступить.