服务器的组成员
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
脚本有效...我觉得还不错,但结果有些问题。
群名显示为@{Name=Groupname}
,群名是否会显示为“群名”?
如果服务器在 1 个以上的“WSUS”组中,我会得到 System.Object[]
。如何获得服务器所属的所有组?
我认为我的问题并不难解决,但我没有带有 PowerShell 的 xp 无法自行解决。
此致
迈克尔
编辑:原来的问题已经解决了……但是新问题来了!
该脚本用于 3 个不同的域(美国、欧盟、亚洲),域构建相同。相同的 OU 结构,相同的设置,相同的一切。
基于更新的脚本,我能够为 3 个域中的 2 个域获得我想要的结果。在第三个域上,get-adprincipalgroupmembership 命令出错:
Get-ADPrincipalGroupmembership: 由于内部错误,服务器无法处理请求。
我在谷歌上搜索了很多关于这个错误的信息。即使在 Whosebug 上也有一个带有该错误的主题:
当任何用户组名称包含“/”时,Get-ADPrincipalGroupMembership 失败
但我认为这描述的情况与我的情况不同。又或许是我瞎了....
所以:有没有办法解决这个问题/错误,或者我是否必须使用另一个与 Get-ADPrincipalGroupmembership 功能相同的命令?
谢谢你,迈克尔
- 使用
Select-Object
属性 的 -ExpandProperty
参数来获取 属性 值而不包含列 header.
查看差异:
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 ','
我想在整个域中获得我的广告计算机(服务器)的“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}
,群名是否会显示为“群名”?如果服务器在 1 个以上的“WSUS”组中,我会得到
System.Object[]
。如何获得服务器所属的所有组?
我认为我的问题并不难解决,但我没有带有 PowerShell 的 xp 无法自行解决。
此致 迈克尔
编辑:原来的问题已经解决了……但是新问题来了!
该脚本用于 3 个不同的域(美国、欧盟、亚洲),域构建相同。相同的 OU 结构,相同的设置,相同的一切。
基于更新的脚本,我能够为 3 个域中的 2 个域获得我想要的结果。在第三个域上,get-adprincipalgroupmembership 命令出错:
Get-ADPrincipalGroupmembership: 由于内部错误,服务器无法处理请求。
我在谷歌上搜索了很多关于这个错误的信息。即使在 Whosebug 上也有一个带有该错误的主题:
当任何用户组名称包含“/”时,Get-ADPrincipalGroupMembership 失败
但我认为这描述的情况与我的情况不同。又或许是我瞎了....
所以:有没有办法解决这个问题/错误,或者我是否必须使用另一个与 Get-ADPrincipalGroupmembership 功能相同的命令?
谢谢你,迈克尔
- 使用
Select-Object
属性 的-ExpandProperty
参数来获取 属性 值而不包含列 header.
查看差异:
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 ','