2011-12-05 11 views
51

Cuando mi script de PowerShell intenta, por ejemplo, crear un objeto SQL Server para un servidor que no existe ("bla" en mi caso), PowerShell muestra muchos errores de PowerShell en rojo.Powershell: ¿Cómo puedo evitar que los errores se muestren en un script?

Dado que mi secuencia de comandos verifica el valor de $? después de dichas llamadas, y muestra y registra errores, prefiero no mostrar también las varias líneas de errores de PowerShell.

¿Cómo puedo desactivar las que se muestran para mi script?

Respuesta

79

Tienes un par de opciones. Lo más fácil es utilizar la configuración ErrorAction.

-Erroraction es un parámetro universal para todos los cmdlets. Si hay comandos especiales que desea ignorar, puede usar -erroraction 'silentlycontinue', que básicamente ignorará todos los mensajes de error generados por ese comando. También puede utilizar el valor Ignore (en PowerShell 3+):

A diferencia SilentlyContinue, haga caso de no añadir el mensaje de error a la variable automática $ Error.

Si desea ignorar todos los errores en un script, puede utilizar la variable del sistema $ErrorAction y hacer la misma cosa: $ErrorActionPreference= 'silentlycontinue'

Ver about_CommonParameters para obtener más información.

+7

establecer la variable de sistema "-ErrorAction 'silentlyStop'" es el truco. –

12

Windows PowerShell proporciona dos mecanismos para informar de errores: un mecanismo para errores de terminación y otro mecanismo para errores no terminan.

El código interno CmdLets puede llamar a un método ThrowTerminatingError cuando se produce un error que no permite o no debe permitir que el cmdlet continúe procesando sus objetos de entrada. El generador de secuencias de comandos puede usar excepciones para detectar estos errores.

EX:

try 
{ 
    Your database code 
} 
catch 
{ 
    Error reporting/logging 
} 

código cmdlets interna puede llamar a un método WriteError reportar errores no terminar cuando el cmdlet puede continuar procesando los objetos de entrada. El guionista puede entonces usar la opción -ErrorAction para ocultar los mensajes, o usar el $ErrorActionPreference para configurar el comportamiento del guión completo.

6

Tuve un problema similar al intentar resolver nombres de host utilizando [system.net.dns]. Si la IP no se resolvió, .Net arrojó un error de terminación. Para evitar el error de terminación y aún conservar el control de la salida, creé una función usando TRAP.

E.G.

Function Get-IP 
{PARAM ([string]$HostName="") 
PROCESS {TRAP 
      {"" ;continue} 
      [system.net.dns]::gethostaddresses($HostName) 
     } 
} 
-1

Si desea que el ErrorMessage PowerShell para un cmdlet suprimida, pero aún así se desea capturar el error, utilice

+0

No hay tal acción. A pesar de que hay una acción Stop. –

Cuestiones relacionadas