如何使用分隔符将对象列表输出到单行

时间:2016-11-29 00:50:38

标签: powershell text-formatting

PowerShell新手,迄今为止的丰富经验。如何格式化以下cmd管道以将屏幕显示为单行,元素以;分隔(以便轻松复制/粘贴到Outlook中)<​​/ p>

PS C:\Users\amrgro-dennem04> get-adgroupmember  -Identity "gbl-intel-l3-u" -Recursive|get-aduser -properties Mail|select-object Name

Name
 ----
AMRCVW-EDELSI
AMRMOP-REITES
amrmop-kruges

基本上,希望输出看起来像这样:

AMRCVW-EDELSI;AMRMOP-REITES;amrmop-kruges

2 个答案:

答案 0 :(得分:4)

尝试:

(Get-ADGroupMember "gbl-intel-l3-u" -Recursive| Get-ADUser -Properties Mail).Name -join ';'

鉴于您不需要-Properties参数,因为您没有使用.Mail属性,您可以简化为:

(Get-ADGroupMember "gbl-intel-l3-u" -Recursive| Get-ADUser).Name -join ';'

鉴于您只访问.Name属性而未按成员类型进行过滤:

(Get-ADGroupMember "gbl-intel-l3-u" -Recursive).Name -join ';'

如果您使用的是PSv5.1或更高版本(在Windows上),您可以将上述命令传送到Set-Clipboard... | Set-Clipboard),以将生成的文本复制到剪贴板。
在较低的PS版本中,您可以转而使用外部clip.exe实用程序(... | clip),但请注意,这总是会附加一个换行符,并且您可能会遇到编码问题。

注意:

  • 在PSv3 +中,只需在集合本身上使用.<propertyName>即可提取集合的元素的属性值。

    • 简化示例:
      @( [pscustomobject] @{ one = '1a' }, [pscustomobject] @{ one = '1b' } ).one会产生数组@( '1a', '1b' )
  • -join ';'然后将结果属性值数组与;作为分隔符连接,以形成单个输出字符串。

答案 1 :(得分:0)

像这样的事情应该有所帮助,这是一个带有两个命令链接在一起的衬板:

$test = get-adgroupmember  -Identity "gbl-intel-l3-u" -Recursive|get-aduser -properties Mail|select-object Name ; $test -join '; ';