【问题标题】:How to suppress PowerShell Get-Content output如何抑制 PowerShell Get-Content 输出
【发布时间】:2012-01-24 09:54:04
【问题描述】:

我有一个 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
--------------

有没有办法抑制这个输出?

谢谢。

【问题讨论】:

    标签: powershell


    【解决方案1】:

    可能输出不是由赋值语句(可撤销语句)引起的,而是由这一行引起的:

    [System.Xml.XmlDocument] $Config;

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

    • 连接到 Out-Null cmdlet: [System.Xml.XmlDocument] $Config | Out-Null
    • 铸造无效: [void][System.Xml.XmlDocument]$Config
    • 分配给 $null: $null = $Config
    • 或者根本不“声明”$Config 变量

    是抑制这种行为的方法。

    【讨论】:

      【解决方案2】:

      如果您不想将命令的输出打印到控制台,您可以通过管道重定向丢弃它 em> 发给Out-Null。例如两者都可以工作:

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

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

      【讨论】:

      • 您也可以分配给$null。无论如何,它实际上并不相同,因为您 redirect 执行 /dev/nullpipeOut-Null
      • @Joey 正确,因为 /dev/null 表示为文件。感谢您指出。
      • 我更新了我的问题以更好地描述我的代码。我试过你的建议,但对我没有帮助。因为当我重定向输出时,当我调用它时,我的 Config 变量在下一个函数中为空。
      • @zosim Load-Config 函数中的代码不应向控制台打印任何内容。能否请您发布整个脚本?
      • 我更新了问题。它只是一个片段,但足以看到我所描述的行为。
      【解决方案3】:

      您正在从脚本中转储变量的地方。当它从管道中掉出来时,它会被传递给 Out-Host,这将产生您看到的输出。

      实际的解决方案是确保您不会从脚本中返回任何内容。由于我看不到您的代码,因此我无法指出在哪里,但是在某处存在将对象泄漏到输出中的管道或语句。您确定在每个需要的地方都使用了作业吗?

      【讨论】:

        【解决方案4】:

        几个选项:

        # Pipe to the Out-Null cmdlet
        $Config | Out-Null
        
        # Cast to void
        [void]$Config 
        
        # assign to $null
        $null = $Config
        
        # redirect to $null
        $Config > $null
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-01-31
          • 1970-01-01
          • 2012-08-11
          • 1970-01-01
          • 2014-10-17
          • 2018-08-14
          • 1970-01-01
          相关资源
          最近更新 更多