服务器的组成员

Group Membership of Servers

我想在整个域中获得我的广告计算机(服务器)的“WSUS”组成员身份。 PowerShell 脚本正在使用:

$csvInfos=@()
$allservers=@(Get-ADComputer -SearchBase "OU=BRLN-Servers,OU=OU-BRLN,OU=DE,OU=Locations,DC=bla,DC=bla,DC=bla" -Filter * -Properties *)
foreach($server in $allservers){
                $customobject = new-object -TypeName PSObject -Property @{

                'Servername' = $server.Name
                'WSUS Gruppen' = ($server | get-ADPrincipalGroupMembership |?{$_.Name -like '*wsus*'} | Select-Object Name )
                'OS' = $server.OperatingSystem }

            $csvinfos+= $customobject }

$csvinfos | export-csv c:\temp\wsus_server_groups.csv -Delimiter ";" -NoTypeInformation

脚本有效...我觉得还不错,但结果有些问题。

  1. 群名显示为@{Name=Groupname},群名是否会显示为“群名”?

  2. 如果服务器在 1 个以上的“WSUS”组中,我会得到 System.Object[]。如何获得服务器所属的所有组?

我认为我的问题并不难解决,但我没有带有 PowerShell 的 xp 无法自行解决。

此致 迈克尔

编辑:原来的问题已经解决了……但是新问题来了!

该脚本用于 3 个不同的域(美国、欧盟、亚洲),域构建相同。相同的 OU 结构,相同的设置,相同的一切。

基于更新的脚本,我能够为 3 个域中的 2 个域获得我想要的结果。在第三个域上,get-adprincipalgroupmembership 命令出错:

Get-ADPrincipalGroupmembership: 由于内部错误,服务器无法处理请求。

我在谷歌上搜索了很多关于这个错误的信息。即使在 Whosebug 上也有一个带有该错误的主题:

当任何用户组名称包含“/”时,Get-ADPrincipalGroupMembership 失败

但我认为这描述的情况与我的情况不同。又或许是我瞎了....

所以:有没有办法解决这个问题/错误,或者我是否必须使用另一个与 Get-ADPrincipalGroupmembership 功能相同的命令?

谢谢你,迈克尔

  1. 使用 Select-Object 属性 的 -ExpandProperty 参数来获取 属性 值而不包含列 header.

查看差异:

Get-Process explorer | Select Name

Name    
----    
explorer

Get-Process explorer | Select -ExpandProperty Name
explorer
  1. 用逗号连接多个结果,(如果只有一个元素,则不会发生连接)

要将数组转换为字符串,您需要以某种方式解析它,例如用逗号连接它

示例:

1..3 # Array of 3 elements
1
2
3

(1..3).ToString() # Convert it to string will result:
System.Object[]

(1..3 -join ',').ToString() # using join will result:
1,2,3

# for one element, there's no effect:

(1 -join ',').ToString()
1

因此,更新此行以解决这两个问题:

'WSUS Gruppen' = ($server | get-ADPrincipalGroupMembership |?{$_.Name -like '*wsus*'} | 
Select-Object -ExpandProperty Name ) -join ','