Как подавить вывод PowerShell Get-Content - PullRequest
8 голосов
/ 24 января 2012

У меня есть сценарий PS:

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>

Позже в сценарии я работаю с $ Configпеременная.Когда я запускаю этот скрипт, он записывает вывод в консоль, которая содержит корневой элемент xml.Что-то вроде:

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

Есть ли способ как-то подавить этот вывод?

Спасибо.

Ответы [ 4 ]

6 голосов
/ 24 января 2012

Возможно, вывод не вызван оператором присваивания (оператор voidable), а строкой:

[System.Xml.XmlDocument] $Config;

Обычно в PowerShell все операторы возвращают значение(за исключением оспариваемых утверждений).Я думаю, что при первом запуске сценария выходные данные не будут записываться в консоль.Однако при последующих запусках $Config все равно будет содержать значение предыдущего прогона, и его значение будет записано на экран.

  • конвейерная передача в командлет Out-Null: [System.Xml.XmlDocument] $Config | Out-Null
  • приведение к пустоте: [void][System.Xml.XmlDocument]$Config
  • присвоение $ null: $null = $Config
  • или просто не «объявление» переменной $Config

способы подавить это поведение.

6 голосов
/ 24 января 2012

Если вы не хотите, чтобы вывод команды выводился на консоль, вы можете сбросить ее с помощью трубопровода ее или перенаправить еедо Out-Null .Например, оба будут работать:

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

Если вы знакомы с Unix-подобными операционными системами, Out-Null концептуально эквивалентно /dev/null.

0 голосов
/ 24 января 2012

Несколько вариантов:

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

# Cast to void
[void]$Config 

# assign to $null
$null = $Config

# redirect to $null
$Config > $null
0 голосов
/ 24 января 2012

Где-то вы выгружаете переменную из вашего скрипта. Когда он выпадает из канала, он передается в Out-Host, и это дает результат, который вы видите.

Фактическое решение - убедиться, что вы ничего не возвращаете из своего скрипта. Поскольку я не вижу ваш код, я не могу указать, где, но где-то есть конвейер или оператор, который пропускает объект в вывод. Вы уверены, что используете назначение в каждом нужном вам месте?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...