在 Powershell 中查询 XML 文件中的值
Posted
技术标签:
【中文标题】在 Powershell 中查询 XML 文件中的值【英文标题】:Query XML file for a value in Powershell 【发布时间】:2014-12-16 16:33:28 【问题描述】:您好,我正在尝试使用 powershell 在 XML 文件中的 Displayname 下面进行查询
<DeploymentConfiguration PackageId="dce78f0d-d8d4-4a89-9f5d-c37fbf95ee7a" DisplayName="Beyond-Compare-3-3-8" IgnorableNamespaces="" xmlns="http://schemas.microsoft.com/appv/2010/deploymentconfiguration">
我试过
$Xml = Select-Xml -Path "C:\temp\Beyond-Compare-3-3-8_DeploymentConfig.xml" -Namespace $Namespace -XPath "DisplayName="
我得到错误
Select-Xml:无法验证参数“命名空间”上的参数。参数为 null 或空。提供一个论证 不为空或为空,然后重试该命令。 在行:1 字符:191 + ... l" -命名空间 $命名空间 -XPath "DisplayName=" + ~~~~~~~~~~ + CategoryInfo : InvalidData: (:) [Select-Xml], ParameterBindingValidationException + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.SelectXmlCommand
【问题讨论】:
该错误意味着您的变量 $Namespace 为空或为空 对不起,我只是在编辑帖子以包含 XML 文件,我只需要语法来查询什么显示名称值 = 并设置为变量 【参考方案1】:首先,您的 xml 无效,因为节点没有关闭。这是一个有效的版本:
<DeploymentConfiguration PackageId="dce78f0d-d8d4-4a89-9f5d-c37fbf95ee7a" DisplayName="Beyond-Compare-3-3-8" IgnorableNamespaces="" xmlns="http://schemas.microsoft.com/appv/2010/deploymentconfiguration"/>
现在在 powershell 中:
[xml]$xml = Get-content c:\path\xmlFile.xml
$DisplayName= $xml.DeploymentConfiguration.Displayname
【讨论】:
100% 有效,非常感谢您的时间和帮助。【参考方案2】:使用相同的方法,您需要注册映射到默认命名空间 URI 的前缀,将映射作为 -Namespace
参数传递,并在您的 XPath 中使用注册的前缀 -ns
在此示例中。您尝试的 XPath 表达式也无效:
$Namespace = @ ns = 'http://schemas.microsoft.com/appv/2010/deploymentconfiguration'; ;
$Xml = Select-Xml -Path "C:\temp\Beyond-Compare-3-3-8_DeploymentConfig.xml" -Namespace $Namespace -XPath "//ns:DeploymentConfiguration/@DisplayName"
【讨论】:
以上是关于在 Powershell 中查询 XML 文件中的值的主要内容,如果未能解决你的问题,请参考以下文章
在 Powershell 中从非常大的 XML 文件中删除节点