
Tengo problemas para ejecutar un script de Powershell como tarea programada. El script inicia sesión de forma remota en dos hosts Hyper-V, consulta el estado de replicación y me envía el resultado por correo electrónico. El script funciona bien cuando lo ejecuto manualmente, ya sea en Powershell ISE o ejecutándolo directamente; sin embargo, cuando lo ejecuto como una tarea programada, la tarea se atasca en un estado de ejecución y nunca obtengo un resultado.
Verifiqué que la configuración de mi tarea programada funciona correctamente reemplazando el script con uno que simplemente escribe un archivo de texto en una carpeta local, por lo que no es eso. También inicié sesión con el mismo usuario con el que se ejecuta la tarea cuando ejecuto manualmente el script, así que no es eso, ¿qué me falta?
Aquí está mi guión:
$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"
}
El script llama a otro script en la misma carpeta:
$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
}
}
Parece que el script no puede iniciar sesión porque el archivo iveremoted.txt no se escribe en la máquina remota.
¿Alguna idea de lo que podría haberme perdido?
Respuesta1
No estoy seguro de por qué, pero si ejecuto el código Check_VMReplication.ps1 usando
Invoke-Command -Credential $mycred -ScriptBlock {CODE GOES HERE}
en lugar de un segundo archivo de script, funciona bien. Supongo que tendré que hacerlo de esa manera.