【问题标题】:Powershell: how to suppress output of Select-Xml?Powershell:如何抑制 Select-Xml 的输出?
【发布时间】:2020-05-04 21:19:34
【问题描述】:

我将 XML 文件内容分配给变量 $config,然后使用另一个变量 $market 来存储 XPath 查询的输出:

$config = Get-Content -Path "C:\files\configs\config.xml" -raw
$market = (select-xml -Content $config -xpath /process-config/input/filePattern/marketCode).node.'#text'

然后我添加以下行:

write-host this is $market

输出是这样的:

PS C:\ps_scripts> .\xmltest.ps1

this is citigroup_ams 
#text
-----
 citigroup_ams

我想要的输出是:

PS C:\ps_scripts> .\xmltest.ps1

    this is citigroup_ams 

我试图在第二行的末尾添加| Out-Null,但在这种情况下,只有 Write-Host cmdlet 的输出被禁止。 有没有其他方法可以抑制Select-Xml的输出?

【问题讨论】:

  • 无法复制。显示重现此行为的完整代码(和 XML)。
  • 话虽如此,永远不要使用Get-Content 来读取XML 文件。 Get-Content 不够聪明,无法正确读取 XML 文件。使用 Select-Xml -Path $pathToFile 读取 XML 文件。也少写了。

标签: xml xpath powershell-5.0 select-xml


【解决方案1】:

您可能正在寻找这样的东西:

$config = [xml]@'
  <process-config> 
    <input> 
      <filePattern> 
        <marketCode>citigroup_ams</marketCode>
      </filePattern>
    </input>  
  </process-config> 
'@
$market = $config.SelectNodes("/process-config/input/filePattern/marketCode/text()").Value
Write-Host "this is" $market

输出:this is citigroup_ams

【讨论】:

  • 所以你的意思是我总是必须手动将 XML 数据放入 @' '@?如果我希望我的脚本遍历目录并从多个 XML 文件中提取数据怎么办。如果我在第一行使用 '$config = Get-Content -Path "C:\files\configs\config.xml" -raw' 其余的是您的代码,那么我会得到“方法调用失败,因为 [System.String ] 不包含名为“SelectNodes”的方法"
  • 使用[xml]$config= Get-Content 'C:\files\configs\config.xml' 加载您的数据。如果您有多个项目,请使用 GetChildren 和通配符 * 选择所有 XML 文件,然后使用 foreach 循环。
猜你喜欢
  • 1970-01-01
  • 2017-01-31
  • 1970-01-01
  • 2012-08-11
  • 2011-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多