服务器的组成员身份

时间:2020-07-20 10:51:44

标签: powershell active-directory windows-server-2012-r2

我想获得整个域中我的广告计算机(服务器)的“ 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},是否有可能将组名显示为“ Groupname”?

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

我认为我的问题并不是很难解决,但是我没有将xp与PowerShell一起自行完成。

最好的问候 迈克尔

编辑:原始问题已解决……但这是一个新问题!

该脚本用于3个不同的域(美国,欧盟,亚洲)。域的构建方式相同。相同的OU结构,相同的设置,相同的所有内容。

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

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

我对这个错误进行了很多搜索。即使在stackoverflow上,也存在该错误的主题:

任何用户组名称带有“ /”的Get-ADPrincipalGroupMembership均失败

但我不认为这与我的情况相同。也许我是盲人。...

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

谢谢你,迈克尔

1 个答案:

答案 0 :(得分:1)

  1. 使用-ExpandProperty属性的Select-Object参数来获取没有列标题的属性值。

查看区别:

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 ','