如何抑制PowerShell Get-Content输出

8

I have a PS script:

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个回答

8
如果你不想将命令的输出打印到控制台上,你可以通过管道重定向将其丢弃到Out-Null。例如以下两种方式都可以:
$Config | Out-Null
$Config > Out-Null

如果您熟悉类Unix操作系统,Out-Null在概念上等同于/dev/null

你也可以将值赋给 $null。无论哪种情况,它实际上并不相同,因为你可以通过 重定向/dev/null,但是通过 管道Out-Null - Joey
@Joey 正确,因为/dev/null被表示为文件。感谢您指出这一点。 - Enrico Campidoglio
我已经更新了我的问题以更好地描述我的代码。我尝试了你的建议,但是它并没有帮助我。因为当我重定向输出时,在我调用下一个函数时,我的Config变量为空。 - zosim
@zosim Load-Config 函数中的代码不应该向控制台打印任何内容。您能否发布整个脚本? - Enrico Campidoglio
我已经更新了问题。虽然只是一个片段,但足以展示我所描述的行为。 - zosim

6
也许输出不是由赋值语句(可空语句)引起的,而是由这一行引起的:[System.Xml.XmlDocument] $Config; 在PowerShell中,通常情况下,所有语句都会返回一个值(除了可空语句)。我认为第一次运行脚本时,不会将任何输出写入控制台。但是在随后的运行中,$Config仍将包含上次运行的值,并且其值将被写入屏幕。
以下是抑制此行为的方法:
  • 将其传递给Out-Null命令: [System.Xml.XmlDocument] $Config | Out-Null
  • 进行强制转换为void: [void][System.Xml.XmlDocument]$Config
  • 分配给$null: $null = $Config
  • 或者简单地不“声明”$Config变量
请注意保留HTML标记。

0

几个选项:

# 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

你的脚本中可能有地方在丢弃变量。当它从管道中流出时,它会被传递给 Out-Host 并产生你看到的输出。

实际的解决方案是确保你的脚本不返回任何东西。由于我看不到你的代码,我无法指出具体位置,但在某个地方可能存在泄漏对象到输出的管道或语句。你确定你在需要的每个地方都使用了赋值吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接