如何抑制PowerShell获取内容输出
我有一个PS脚本: script.ps1如何抑制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
[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
表示为文件。谢谢你指出。我已经更新了我的问题,以便更好地描述我的代码。我试过你的建议,但没用。因为当我重定向输出时,我调用下一个函数时,我的配置变量是空的。@zosimLoad-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