我确信这很容易但我找不到一种方法来将分号分隔的字符串格式化为列表或对象,并尽可能使用通用方法。
运行该命令将显示以下内容:
PS> Get-childitem -path Env:\Path
Name Value
---- -----
Path Value1;Value2;Value3 etc...
预期结果是:
Name Value
---- ----
Path Value1
Path Value2
Path Value3
答案 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\
....
(我使用RemoveEmptyEntries
和Where-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:Path
将Get-Item env:\Path
(更有效等效于;
)的值拆分为字符串数组。
-ne ''
从结果数组中删除空条目。
Select-Object
命令为每个数组条目构造一个2属性对象,默认情况下显示为表:
@{ ... }
参数是计算属性,它们定义输出对象的.Name
和.Value
属性,使用在{{中解释的哈希表格式我的3}}