如何抑制PowerShell获取内容输出

如何抑制PowerShell获取内容输出,powershell,Powershell,我有一个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

我有一个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 | Out-Null
$Config > Out-Null
如果您熟悉类Unix操作系统,则在概念上等同于
/dev/null

以下几个选项:

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

# Cast to void
[void]$Config 

# assign to $null
$null = $Config

# redirect to $null
$Config > $null

输出可能不是由赋值语句(可作废语句)引起的,而是由以下行引起的:

[System.Xml.XmlDocument]$Config

通常,在PowerShell中,所有语句都返回一个值(可作废语句除外)。我认为第一次运行脚本时,不会向控制台写入任何输出。但是,在后续运行中,
$Config
仍将包含上一次运行的值,其值将写入屏幕

  • 到Out Null cmdlet的管道:
    [System.Xml.XmlDocument]$Config | Out Null
  • 铸造无效:
    [void][System.Xml.XmlDocument]$Config
  • 分配给$null:
    $null=$Config
  • 或者干脆不“声明”
    $Config
    变量

是抑制此行为的方法。

您还可以将分配给
$null
。在任何情况下,它实际上并不相同,因为您重定向到
/dev/null
,但管道指向
Out null
@Joey Correct,因为
/dev/null
表示为文件。谢谢你指出。我已经更新了我的问题,以便更好地描述我的代码。我试过你的建议,但没用。因为当我重定向输出时,我调用下一个函数时,我的配置变量是空的。@zosim
Load-Config
函数中的代码不应该向控制台打印任何内容。你能把整个剧本贴出来吗?我已经更新了问题。这只是一个片段,但足以看出我所描述的行为。
# Pipe to the Out-Null cmdlet
$Config | Out-Null

# Cast to void
[void]$Config 

# assign to $null
$null = $Config

# redirect to $null
$Config > $null