remote Powershell script Tarefa agendada

3

Estou tendo problemas para executar um script do Powershell como uma tarefa agendada. O script registra-se remotamente em dois hosts do Hyper-V, consulta o status da replicação e envia o resultado por e-mail para mim. O script funciona bem quando eu o executo manualmente, seja no Powershell ISE ou executando o script diretamente, no entanto, quando eu o executo como uma tarefa agendada, a tarefa fica presa em um estado de execução e eu nunca obtenho um resultado.

Verifiquei se a configuração da minha tarefa agendada está funcionando corretamente, substituindo o script por um que simplesmente grava um arquivo de texto em uma pasta local, portanto não é isso. Eu também estou logado como o mesmo usuário que a tarefa é executada quando eu manualmente executar o script, então não é isso, o que estou faltando?

Aqui está meu script:

$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"
}

O script chama outro script na mesma pasta:

$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
    }

}

O script parece não conseguir fazer logon porque o arquivo iveremoted.txt não é gravado na máquina remota.

Alguma idéia do que eu poderia ter perdido?

    
por Christophe MacAlister 20.05.2015 / 14:38

1 resposta

0

Não sei por que, mas se eu executar o código Check_VMReplication.ps1 usando

Invoke-Command  -Credential $mycred -ScriptBlock {CODE GOES HERE} 

em vez de um segundo arquivo de script, ele é executado corretamente. Eu acho que vou ter que fazer assim.

    
por 20.05.2015 / 16:45