2012-01-01 22 views
15

he intentado que encierra el siguiente en una sentencia if para que pueda ejecutar otro comando si esto tiene éxito:Comprobar si un comando se ha ejecutado correctamente

Get-WmiObject -Class Win32_Share -ComputerName $Server.name -Credential $credentials -Filter "Description='Default share'" | Foreach-Object { 
     $Localdrives += $_.Path 

pero no puedo encontrar la manera de hacerlo. Incluso intenté crear una función, pero no pude averiguar cómo verificar si la función también se completó con éxito.

Respuesta

10

que puede probar:

$res = get-WmiObject -Class Win32_Share -Filter "Description='Default share'" 
if ($res -ne $null) 
{ 
    foreach ($drv in $res) 
    { 
    $Localdrives += $drv.Path 
    } 
} 
else 
{ 
    # your error 
} 
+0

Ahora por qué no se me había ocurrido esto !! Muchas gracias :) – Sune

36

Prueba el $? variable automática:

$share = Get-WmiObject -Class Win32_Share -ComputerName $Server.name -Credential $credentials -Filter "Description='Default share'" 

if($?) 
{ 
    "command succeeded" 
    $share | Foreach-Object {...} 
} 
else 
{ 
    "command failed" 
} 

De about_Automatic_Variables:

$? 
    Contains the execution status of the last operation. It contains 
TRUE if the last operation succeeded and FALSE if it failed. 
... 

$LastExitCode 
    Contains the exit code of the last Windows-based program that was run. 
+1

Opté por la primera solución esta vez, pero esta es una excelente manera de hacerlo. Gracias otra vez Shay :) – Sune

+0

Lo siento Shay: Prueba 'get-WmiObject -Class Win32_Share -Filter" Description = 'glurp' "', pero en este caso $? es cierto y no hay compartir con esta descripción. – JPBlanc

+5

El comando no devolvió un error, entonces $? está configurado en $ true. Esto es lo mismo que: dir * .NoSucheExtension, el resultado no es nada y no se considera un error. Use la solución de @ JPBlanc cuando quiera probar si el comando arrojó algún resultado. –

Cuestiones relacionadas