use*_*lid 5 powershell hashtable
是否可以在Powershell中格式化哈希表的输出以将所有值输出到一行?
例如
我有以下值的哈希表$ hashErr:
$hashErr = @{"server1" = "192.168.17.21";
"server2" = "192.168.17.22";
"server3" = "192.168.17.23"}
Run Code Online (Sandbox Code Playgroud)
使用以下内容写入日志:
$hashErr.GetEnumerator() | Sort-Object Name | ForEach-Object {ForEach-Object {"{0}`t{1}" -f $_.Name,($_.Value -join ", ")} | Add-Content $log
Run Code Online (Sandbox Code Playgroud)
这将导致以下内容写入日志:
Name Value
---- -----
server2 192.168.17.22
server1 192.168.17.21
server3 192.168.17.23
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何格式化这个哈希表,以便将输出全部写入一行,如下所示?
server2 192.168.17.22 | server1 192.168.17.21 | server3 192.168.17.23
Run Code Online (Sandbox Code Playgroud)
这可以通过循环遍历哈希表中的所有值并将它们放入数组来完成,但肯定有更直接的方法吗?
您可以迭代哈希表的键,然后在循环中查找值.通过使用管道,您不需要中间集合:
($hashErr.Keys | foreach { "$_ $($hashErr[$_])" }) -join "|"
Run Code Online (Sandbox Code Playgroud)
Richard的解决方案的V4版本:
$hashErr = @{"server1" = "192.168.17.21";
"server2" = "192.168.17.22";
"server3" = "192.168.17.23"}
$hashErr.Keys.ForEach({"$_ $($hashErr.$_)"}) -join ' | '
server3 192.168.17.23 | server2 192.168.17.22 | server1 192.168.17.21
Run Code Online (Sandbox Code Playgroud)
不是您想要的 excat 输出,而是 1 行输出。
$hashErr | ConvertTo-Json -Compress
Run Code Online (Sandbox Code Playgroud)
输出:
{"server2":"192.168.17.22","server3":"192.168.17.23","server1":"192.168.17.21"}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18486 次 |
| 最近记录: |