Remote-Powershell-Skript Geplante Aufgabe

Remote-Powershell-Skript Geplante Aufgabe

Ich habe Probleme, ein Powershell-Skript als geplante Aufgabe auszuführen. Das Skript meldet sich remote bei zwei Hyper-V-Hosts an, fragt den Replikationsstatus ab und sendet mir das Ergebnis per E-Mail zurück. Das Skript funktioniert einwandfrei, wenn ich es manuell ausführe, entweder in Powershell ISE oder indem ich das Skript direkt ausführe. Wenn ich es jedoch als geplante Aufgabe ausführe, bleibt die Aufgabe im laufenden Zustand hängen und ich erhalte nie ein Ergebnis.

Ich habe überprüft, ob die Einrichtung meiner geplanten Aufgabe richtig funktioniert, indem ich das Skript durch eines ersetzt habe, das einfach eine Textdatei in einen lokalen Ordner schreibt. Das ist es also nicht. Ich bin auch als derselbe Benutzer angemeldet, unter dem die Aufgabe ausgeführt wird, wenn ich das Skript manuell ausführe. Das ist es also nicht. Was übersehe ich?

Hier ist mein Skript:

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

Das Skript ruft ein anderes Skript im selben Ordner auf:

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

}

Das Skript kann sich anscheinend nicht anmelden, da die Datei iveremoted.txt nicht auf den Remotecomputer geschrieben wird.

Irgendeine Idee, was ich möglicherweise übersehen habe?

Antwort1

Ich bin mir nicht sicher, warum, aber wenn ich den Code Check_VMReplication.ps1 ausführe mit

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

anstelle einer zweiten Skriptdatei läuft es einwandfrei. Ich schätze, ich muss es einfach so machen.

verwandte Informationen