Powershell 多行合并为一行并用逗号分隔的结果
我尝试将多行的一些结果放在一行中,并用逗号分隔 通过以下命令,我得到了这个结果:Powershell 多行合并为一行并用逗号分隔的结果,powershell,Powershell,我尝试将多行的一些结果放在一行中,并用逗号分隔 通过以下命令,我得到了这个结果: ((Get-BrokerSession -SessionState Disconnected |Select-Object UserName,MachineName | ft -hidetableheaders | Out-String | ForEach-Object { $_.Trim() })) host1 user@host1 我试图通过添加以下内容,将此结果仅放在一行中,以逗号分隔: -join ',
((Get-BrokerSession -SessionState Disconnected |Select-Object UserName,MachineName | ft -hidetableheaders | Out-String | ForEach-Object { $_.Trim() }))
host1
user@host1
我试图通过添加以下内容,将此结果仅放在一行中,以逗号分隔:
-join ', '
但结果是一样的:
((Get-BrokerSession -SessionState Disconnected |Select-Object UserName,MachineName | ft -hidetableheaders | Out-String | ForEach-Object { $_.Trim() })) -join ', '
host1
user@host1
那是怎么回事?
提前感谢。当您通过管道将表格设置为
格式时,您正在创建一个表格对象。将其输送到输出字符串
将从格式化表中创建单个字符串。因此,运行-join','
实际上是将一个字符串连接起来,因为它是一个单独的字符串
使用自定义对象类型并转换为自定义输出可能有点棘手,因为在调用out string
无法实现预期效果的情况下,对象可能会保存复杂的数据
这里有一种方法可以获得您想要的:
(Get-BrokerSession -SessionState Disconnected | # Get the original objects
Select-Object UserName, MachineName | # Select just the fields you want to keep
Foreach-Object { # Iterate over each nested object and...
$_.psobject.Members |
Where-Object MemberType -like 'noteproperty' | # Get only the members that are the note properties you selected
Foreach-Object { # Iterate over each note property and...
$_.Value.toString() # Convert just the value of the property to a string
}
}) -join ',' # The result is an array which you can perform -join on
我不知道您的具体用例,但如果可能的话,我会推荐标准格式,如.csv、.xml或.json。如果您能够设法使用这些功能,则上一个块将变成:
Get-BrokerSession -SessionState Disconnected |
Select-Object UserName, MachineName |
ConvertTo-CSV
删除ft | Out字符串
内容,只需执行getbrokersession-SessionState Disconnected | ForEach对象{{{0}`r`n{1})-f$\机器名,$\用户名}
相同的结果。我看到多个linesAh,没有;我没听清楚。然后执行getbrokersession-SessionState Disconnected | ForEach对象{{{0},{1})-f$\u0.MachineName,$\u0.UserName}
现在我看到一行中的两列用逗号分隔,但需要将所有新行添加到一行中。我做到了(Get-BrokerSession-SessionState断开连接| ForEach对象{{0},{1})-f$\u.MachineName,$\u.UserName})-连接','