8 Stimmen

So unterdrücken Sie die PowerShell Get-Content-Ausgabe

Ich habe ein PS-Skript:

skript.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>

Später im Skript arbeite ich mit der Variablen $Config. Wenn ich dieses Skript ausführe, schreibt es die Ausgabe in die Konsole, die das Root-Element der XML-Datei enthält. Etwas wie:

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

Gibt es eine Möglichkeit, diese Ausgabe zu unterdrücken?

Danke.

7voto

Enrico Campidoglio Punkte 51948

Wenn Sie nicht wollen, dass die Ausgabe eines Befehls auf der Konsole ausgegeben wird, können Sie es verwerfen por Rohrleitungen es oder Umleitung es zu Out-Null . Zum Beispiel wird beides funktionieren:

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

Wenn Sie mit Unix-ähnlichen Betriebssystemen vertraut sind, Out-Null es konzeptionell gleichbedeutend mit /dev/null .

6voto

jon Z Punkte 14850

Wahrscheinlich wird die Ausgabe nicht durch die Zuweisungsanweisung (eine anfechtbare Anweisung) verursacht, sondern durch diese Zeile:

[System.Xml.XmlDocument] $Config;

In PowerShell geben normalerweise alle Anweisungen einen Wert zurück (mit Ausnahme von rückgängig zu machenden Anweisungen). Ich denke, dass bei der ersten Ausführung des Skripts keine Ausgabe in die Konsole geschrieben wird. Bei späteren Ausführen jedoch $Config enthält immer noch den Wert des vorherigen Laufs, und sein Wert wird auf den Bildschirm geschrieben.

  • Piping an das Cmdlet "Out-Null": [System.Xml.XmlDocument] $Config | Out-Null
  • nichtig zu machen: [void][System.Xml.XmlDocument]$Config
  • Zuweisung an $null: $null = $Config
  • oder einfach keine "Deklaration" der $Config variabel

gibt es Möglichkeiten, dieses Verhalten zu unterdrücken.

0voto

Joey Punkte 329386

Irgendwo müssen Sie die Variable aus Ihrem Skript löschen. Wenn sie aus der Pipe fällt, wird sie an Out-Host weitergegeben, und das ergibt die Ausgabe, die Sie sehen.

Die eigentliche Lösung besteht darin, dass Sie sicherstellen, dass Ihr Skript nichts zurückgibt. Da ich Ihren Code nicht sehen kann, kann ich nicht sagen, wo, aber irgendwo gibt es eine Pipeline oder eine Anweisung, die das Objekt in die Ausgabe leckt. Sind Sie sicher, dass Sie an jeder Stelle, die Sie benötigen, eine Zuweisung verwenden?

0voto

Shay Levy Punkte 113401

Ein paar Optionen:

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

# Cast to void
[void]$Config 

# assign to $null
$null = $Config

# redirect to $null
$Config > $null

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X