我想获得整个域中我的广告计算机(服务器)的“ 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
脚本正常工作...我认为还可以,但是我在结果上遇到了一些问题。
组名显示为@{Name=Groupname}
,是否有可能将组名显示为“ Groupname”?
如果服务器在多个“ WSUS”组中,则得到System.Object[]
。如何获得服务器所属的所有组?
我认为我的问题并不是很难解决,但是我没有将xp与PowerShell一起自行完成。
最好的问候 迈克尔
编辑:原始问题已解决……但这是一个新问题!
该脚本用于3个不同的域(美国,欧盟,亚洲)。域的构建方式相同。相同的OU结构,相同的设置,相同的所有内容。
基于更新的脚本,我能够获得3个域中2个的结果。在第三个域上,get-adprincipalgroupmembership命令出现错误:
Get-ADPrincipalGroupmembership:由于内部错误,服务器无法处理请求。
我对这个错误进行了很多搜索。即使在stackoverflow上,也存在该错误的主题:
任何用户组名称带有“ /”的Get-ADPrincipalGroupMembership均失败
但我不认为这与我的情况相同。也许我是盲人。...
所以:是否有办法解决该问题/错误,还是我必须使用另一个与Get-ADPrincipalGroupmembership相同的命令?
谢谢你,迈克尔
答案 0 :(得分:1)
-ExpandProperty
属性的Select-Object
参数来获取没有列标题的属性值。查看区别:
Get-Process explorer | Select Name
Name
----
explorer
Get-Process explorer | Select -ExpandProperty Name
explorer
,
连接多个结果(如果只有一个元素,则不会发生连接)要将数组转换为字符串,您需要以某种方式解析它,例如,用逗号将其连接
示例:
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 ','