首页 > 解决方案 > PowerShell Core `Select-Xml` 不返回任何内容

问题描述

我有一个想要通过 PowerShell Core 获取值的 XML 文件。

清理示例:

  <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">

  <PropertyGroup>
    <TargetFrameworks></TargetFrameworks>
    <RootNamespace></RootNamespace>
    <AssemblyName></AssemblyName>
    <Company></Company>
    <Authors></Authors>
    <Description></Description>
    <Copyright></Copyright>
    <AssemblyVersion></AssemblyVersion>
    <FileVersion></FileVersion>
    <Product></Product>
  </PropertyGroup>

  <PropertyGroup>
    <Version>1.0.0</Version>
    <RepositoryUrl></RepositoryUrl>
    <GeneratePackageOnBuild></GeneratePackageOnBuild>
  </PropertyGroup>

</Project>

我想获取<Version>元素的值,即1.0.0.

我跑:

pwsh Select-Xml -Path test.csproj -XPath "//Version"

返回:

Node    Path                     Pattern
----    ----                     -------
Version D:\Downloads\test.csproj //Version

当我尝试根据 Microsoft 的文档获取值时,使用:

pwsh Select-Xml -Path test.csproj -XPath "//Version" | Select-Object -ExpandProperty Node

我收到以下错误:

Select-Object : Property "Node" cannot be found.
At line:1 char:56
+ ... h test.csproj -XPath "//Version" | Select-Object -ExpandProperty Node
+                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidArgument: (:PSObject) [Select-Object], PSArgumentException
+ FullyQualifiedErrorId : ExpandPropertyNotFound,Microsoft.PowerShell.Commands.SelectObjectCommand

Select-Object : Property "Node" cannot be found.
At line:1 char:56
+ ... h test.csproj -XPath "//Version" | Select-Object -ExpandProperty Node
+                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidArgument: (Node    Path                     Pattern:PSObject) [Select-Object], PSArgumentException
+ FullyQualifiedErrorId : ExpandPropertyNotFound,Microsoft.PowerShell.Commands.SelectObjectCommand

Select-Object : Property "Node" cannot be found.
At line:1 char:56
+ ... h test.csproj -XPath "//Version" | Select-Object -ExpandProperty Node
+                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidArgument: (----    ----                     -------:PSObject) [Select-Object], PSArgumentException
+ FullyQualifiedErrorId : ExpandPropertyNotFound,Microsoft.PowerShell.Commands.SelectObjectCommand

Select-Object : Property "Node" cannot be found.
At line:1 char:56
+ ... h test.csproj -XPath "//Version" | Select-Object -ExpandProperty Node
+                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidArgument: (Version D:\Download\u2026st.csproj //Version:PSObject) [Select-Object], PSArgumentException
+ FullyQualifiedErrorId : ExpandPropertyNotFound,Microsoft.PowerShell.Commands.SelectObjectCommand

Select-Object : Property "Node" cannot be found.
At line:1 char:56
+ ... h test.csproj -XPath "//Version" | Select-Object -ExpandProperty Node
+                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidArgument: (:PSObject) [Select-Object], PSArgumentException
+ FullyQualifiedErrorId : ExpandPropertyNotFound,Microsoft.PowerShell.Commands.SelectObjectCommand

如何获取此 XML 元素的值?

标签: powershell-core

解决方案


Pwsh 默认为 -file 而不是 -command。管道符号还有一个引用问题。这有效,假设您从 cmd 运行它:

pwsh -c "Select-Xml //Version test.csproj | Select -Expand Node"

#text
-----
1.0.0

或者

pwsh -c (Select-Xml //Version test.csproj).node

如果这是从 unix 或其他版本的 powershell 运行的,则会出现不同的问题。


推荐阅读