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})-连接','