El script de PowerShell se detiene después de ejecutar la declaración If

El script de PowerShell se detiene después de ejecutar la declaración If

Estoy perplejo. Estoy ejecutando el siguiente código en una caja 2012 R2 mientras lo desarrollo. Todo lo que hace esta pieza es obtener el nombre de host, toma el número del final, ejecuta una función para ver si es par o impar y luego establece la ubicación de almacenamiento en función de eso.

Por alguna razón, después de que la instrucción If devuelve el valor, el script simplemente deja de ejecutarse como si hubiera finalizado. Como puede ver, agregué el "mensaje 3" de depuración de escritura y simplemente ni siquiera se registra. ¿Alguien sabe de algún problema de PS para un escenario como este? ¿O es que he cometido algún error en alguna parte? El servidor ejecuta WMF 4.0.

function check-oddOrEven($number)
{
    If([bool]!($number%2))
    {
       $OddEvnResult = "Even"
       return $OddEvnResult
    }
    Else
    {
       $OddEvnResult = "Odd"
       return $OddEvnResult
    }
}

Write-Debug "message1" -debug

$oddStrgPath = "C:\ClusterStorage\Volume1"
$evnStrgPath = "C:\ClusterStorage\Volume2"

$hostname = $env:computername
#$hostname = "testN02"
$OddEvnSplit = $hostname.split('N')[1]

Write-Debug "message2" -debug

$OddEvnResult = check-oddOrEven $OddEvnSplit
if ($OddEvnResult -eq "Odd")
{
    write-host "Odd number in hostname detected (1,3,5..etc). Setting storage path to" $oddStrgPath
    #set-vmhost -VirtualHardDiskPath $oddStrgPath -VirtualMachinePath $oddStrgPath
    $OEresult= $oddStrgPath
    return $OEresult
}
else
{
    write-host "Even number in hostname detected (2,4,6..etc). Setting storage path to" $evnStrgPath
    #set-vmhost -VirtualHardDiskPath $evnStrgPath -VirtualMachinePath $oddStrgPath
    $OEresult= $evnStrgPath
    return $OEresult
}

Write-Debug "message3" -debug

Probé write-host y write-output sin éxito tampoco. Aquí está el resultado de la consola:

DEBUG: message1
DEBUG: message2
Even number in hostname detected (1,3,5..etc). Setting storage path to C:\ClusterStorage\Volume2
C:\ClusterStorage\Volume2

Respuesta1

Por favor leeesta publicación de StackOverflowsobre la declaración de 'retorno'. Aquí está el resumen:

Devolver: Esta voluntadvolver al punto de llamada anterior. Si llama a este comando desde un script (fuera de cualquier función), volverá al shell. Si llama a este comando desde el shell, volverá al shell (que es el punto de llamada anterior para un solo comando ejecutado desde el shell). Si llama a este comando desde una función, volverá al lugar desde donde se llamó la función.

La ejecución de cualquier comando después del punto de llamada al que se devuelve continuará desde ese punto. Si se llama a un script desde el shell y contiene el comando Return fuera de cualquier función, cuando regrese al shell no habrá más comandos para ejecutar, por lo que un Return utilizado de esta manera es esencialmente lo mismo que Salir.

Entonces,tienes que eliminar la declaración de devolución de tu 'if' y 'else', dejando solo la variable para mostrar su contenido.

Ejemplo:

    if ($OddEvnResult -eq "Odd")
{
    write-host "Odd number in hostname detected (1,3,5..etc). Setting storage path to" $oddStrgPath
    #set-vmhost -VirtualHardDiskPath $oddStrgPath -VirtualMachinePath $oddStrgPath
    $OEresult= $oddStrgPath
    $OEresult
}
else
{
    write-host "Even number in hostname detected (2,4,6..etc). Setting storage path to" $evnStrgPath
    #set-vmhost -VirtualHardDiskPath $evnStrgPath -VirtualMachinePath $oddStrgPath
    $OEresult= $evnStrgPath
    $OEresult
}

información relacionada