powershell 要列表或对象的分号分隔字符串

5uzkadbs  于 2023-06-06  发布在  Shell
关注(0)|答案(3)|浏览(490)

我相信这很容易,但我找不到一种方法来格式化一个分号分隔的字符串作为一个列表或对象,尽可能通用的方法。
运行该命令将显示以下内容:

PS> Get-childitem -path Env:\Path

Name                           Value
----                           -----
Path                           Value1;Value2;Value3 etc...

预期结果为:

Name                               Value
----                               ----
Path                               Value1
Path                               Value2
Path                               Value3
gdx19jrr

gdx19jrr1#

您可以拆分值并使用ex。Select-Object与计算属性添加Name属性。

$env:Path.Split(';',[System.StringSplitOptions]::RemoveEmptyEntries) | Select-Object @{n="Name";e={"Path"}}, @{n="Value";e={$_}}

或使用cmdlet

(Get-Item Env:\Path | Select-Object -ExpandProperty Value).Split(';',[System.StringSplitOptions]::RemoveEmptyEntries) |
Select-Object @{n="Name";e={"Path"}}, @{n="Value";e={$_}}

如果你想支持多个变量:

Get-ChildItem Env:\Path | ForEach-Object {
    $name = $_.Name
    $_.Value -split ';' | Where-Object { $_ } | Select-Object @{n="Name";e={$name}}, @{n="Value";e={$_}}
}

输出:

Name Value
---- -----
Path C:\WINDOWS\system32
Path C:\WINDOWS
Path C:\WINDOWS\System32\Wbem
Path C:\WINDOWS\System32\WindowsPowerShell\v1.0\
....

(我使用RemoveEmptyEntriesWhere-Object { $_ }来避免空条目,因为我在自己的Path变量中有一个尾随的;

vojdkbi0

vojdkbi02#

要获得所需的精确输出,请执行以下操作:

$env:Path -split ';' -ne '' |
  Select-Object @{ n = 'Name'; e = { 'Path '} }, @{ n = 'Value'; e = { $_ } }
  • $env:Path -split ';'$env:Path的值(Get-Item env:\Path的更高效的等价物)拆分为单独的;的字符串数组。
  • -ne ''从结果数组中删除 * 空 * 项。
  • Select-Object命令为每个数组条目构造一个2属性对象,默认情况下显示为 table
  • @{ ... }参数是calculated properties,它使用this answer中解释的哈希表格式定义输出对象的.Name.Value属性。
qlckcl4x

qlckcl4x3#

下面的代码片段可能有用:

("Name          ->      Value`r`n--------------------------------------------------");(Get-ChildItem -Path Env:\Path | Select-Object -ExpandProperty Value) -split ";" | foreach {"Path   ->   " + $_}

它将产生以下输出:

Name          ->      Value
--------------------------------------------------
Path   ->   C:\ProgramData\Oracle\Java\javapath
Path   ->   C:\Program Files\Microsoft MPI\Bin\
Path   ->   C:\WINDOWS\system32
Path   ->   C:\WINDOWS
Path   ->   C:\WINDOWS\System32\Wbem

相关问题