2012-01-24 19 views
7

Tengo un script PS:Cómo suprimir PowerShell Get-Content salida

script.ps1

[System.Xml.XmlDocument] $Config; 

function Get-ScriptDirectory 
{ 
    Split-Path $script:MyInvocation.MyCommand.Path 
} 

function Load-Config 
{ 
    $configPath = Join-Path (Get-ScriptDirectory) config.xml 
    $global:Config = [xml](gc $configPath) 
} 

Load-Config 

config.xml

<Configuration> 
</Configuration> 

Más adelante en el guión que estoy trabajando $ Variable de configuración. Cuando ejecuto este script, escribe el resultado en la consola, que contiene el elemento raíz del xml. Algo como:

Configuration 
-------------- 

¿Existe alguna forma de suprimir esta salida?

Gracias.

Respuesta

6

Probablemente, la salida no es causado por la instrucción de asignación (una declaración anulable), sino por esta línea:

[System.Xml.XmlDocument] $Config;

En PowerShell, típicamente , todas las declaraciones devuelven un valor (a excepción de las declaraciones anulables). Creo que la primera vez que ejecute el script, no se escribirá ningún resultado en la consola. Sin embargo, en las siguientes ejecuciones, $Config contendrá el valor de la ejecución anterior y su valor se escribirá en la pantalla.

  • tuberías al cmdlet Out-Null: [System.Xml.XmlDocument] $Config | Out-Null
  • de fundición para anular: [void][System.Xml.XmlDocument]$Config
  • asignar a $ nulo: $null = $Config
  • o simplemente no 'declarar' la $Config variables

son formas de suprimir este comportamiento.

0

En algún lugar está eliminando la variable de su secuencia de comandos. Cuando se sale de la tubería, pasa a Out-Host y eso producirá la salida que ves.

La solución real es asegurarse de que no devuelve nada de su secuencia de comandos. Como no puedo ver su código, no puedo señalar dónde, pero en algún lugar hay una tubería o declaración que filtra el objeto en la salida. ¿Seguro que estás usando una tarea en cada lugar que necesitas?

4

Si no desea que la salida de un comando que se imprimirá en la consola, puede desprenderse de ella por tuberías o redirigir a Out-Null. Por ejemplo, tanto funcionará:

$Config | Out-Null 
$Config > Out-Null 

Si está familiarizado con los sistemas operativos basados ​​en Unix, es Out-Null conceptualmente equivalente a /dev/null.

+0

También se puede asignar a '$ null'. En cualquier caso, en realidad no es lo mismo, ya que * redirecciona * do '/ dev/null' pero * pipe * a' Out-Null'. – Joey

+0

@Joey Correcto, ya que '/ dev/null' se representa como un archivo. Gracias por mencionarlo. –

+0

He actualizado mi pregunta para describir mejor mi código. He intentado con tus consejos, pero no me ha ayudado. Porque cuando redirecciono la salida, mi variable de configuración está vacía en la siguiente función cuando la llamo. – zosim

0

algunas opciones:

# Pipe to the Out-Null cmdlet 
$Config | Out-Null 

# Cast to void 
[void]$Config 

# assign to $null 
$null = $Config 

# redirect to $null 
$Config > $null 
Cuestiones relacionadas