2012-01-24 13 views
7

Ho uno script PS:Come sopprimere PowerShell Get-Content uscita

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> 

Più tardi nello script con cui sto lavorando $ Config variabile. Quando eseguo questo script, scrive l'output sulla console, che contiene l'elemento radice di xml. Qualcosa di simile:

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

Esiste un modo per sopprimere questa uscita?

Grazie.

risposta

6

Probabilmente l'uscita non è causata da l'istruzione di assegnazione (una dichiarazione annullabile), ma da questa linea:

[System.Xml.XmlDocument] $Config;

In PowerShell, tipicamente , tutte le istruzioni restituiscono un valore (ad eccezione delle istruzioni annullabili). Penso che la prima volta che si esegue lo script nessun output verrà scritto sulla console. Tuttavia, nelle corse successive, $Config conterrà ancora il valore dell'esecuzione precedente e il suo valore verrà scritto sullo schermo.

  • tubazioni al cmdlet Out-Null: [System.Xml.XmlDocument] $Config | Out-Null
  • fusione revocatorie: [void][System.Xml.XmlDocument]$Config
  • assegnando $ null: $null = $Config
  • o semplicemente non 'dichiarando' la $Config variabile

sono modi per sopprimere questo comportamento.

0

Da qualche parte si sta scaricando la variabile dal proprio script. Mentre cade fuori dal tubo viene passato a Out-Host e questo produrrà l'output che vedi.

La soluzione effettiva è assicurarsi di non restituire nulla dallo script. Poiché non riesco a vedere il tuo codice, non posso indicarlo dove, ma da qualche parte c'è una pipeline o una dichiarazione che fa filtrare l'oggetto in output. Sei sicuro di utilizzare un incarico in ogni luogo che ti serve?

4

Se non si desidera che l'output di un comando per essere stampato alla console, è possibile scartare da tubazioni o reindirizzamento a Out-Null. Per esempio entrambi funzionerà:

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

Se si ha familiarità con i sistemi operativi Unix-like, Out-Null è concettualmente equivalente a /dev/null.

+0

È inoltre possibile assegnare a '$ null'. In ogni caso, non è in realtà lo stesso, come * reindirizza * fa '/ dev/null' ma * pipe * a' Out-Null'. – Joey

+0

@Joey corretto, poiché '/ dev/null' è rappresentato come un file. Grazie per segnalarlo. –

+0

Ho aggiornato la mia domanda per descrivere meglio il mio codice. Ho provato i tuoi consigli, ma non mi ha aiutato. Perché quando reindirizzo l'output, la mia variabile Config è vuota nella prossima funzione quando la chiamo. – zosim

0

alcune opzioni:

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

# Cast to void 
[void]$Config 

# assign to $null 
$null = $Config 

# redirect to $null 
$Config > $null 
Problemi correlati