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

时间:2018-02-19 17:12:17

标签: powershell

我确信这很容易但我找不到一种方法来将分号分隔的字符串格式化为列表或对象,并尽可能使用通用方法。

运行该命令将显示以下内容:

PS> Get-childitem -path Env:\Path

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

预期结果是:

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

3 个答案:

答案 0 :(得分:1)

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

$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 { $_ }来避免空条目,因为我在自己的路径变量中有一个尾随;

答案 1 :(得分:0)

以下代码段可能很有用:

("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

答案 2 :(得分:0)

获得您想要的确切输出:

$env:Path -split ';' -ne '' |
  Select-Object @{ n = 'Name'; e = { 'Path '} }, @{ n = 'Value'; e = { $_ } }
  • $env:Path -split ';'通过分隔$env:PathGet-Item env:\Path(更有效等效于;)的值拆分为字符串数组。

    < / LI>
  • -ne ''从结果数组中删除条目。

  • Select-Object命令为每个数组条目构造一个2属性对象,默认情况下显示为

    • @{ ... }参数是计算属性,它们定义输出对象的.Name.Value属性,使用在{{中解释的哈希表格式我的3}}