【问题标题】:Group Membership of Servers服务器的组成员身份
【发布时间】:2020-07-21 22:51:55
【问题描述】:

我想获得整个域中我的广告计算机(服务器)的“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. 如果服务器位于超过 1 个“WSUS”组中,我会得到 System.Object[]。如何获取服务器所属的所有组?

我认为我的问题并不难解决,但我没有那个 xp 和 PowerShell 可以自己解决。

最好的问候 迈克尔

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

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

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

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

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

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

但我认为这与我的情况不同。或者我是瞎子……

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

谢谢你,迈克尔

【问题讨论】:

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


    【解决方案1】:
    1. 使用Select-Object 属性的-ExpandProperty 参数获取不带列标题的属性值。

    查看差异:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-11
      • 1970-01-01
      • 1970-01-01
      • 2019-07-05
      • 1970-01-01
      • 1970-01-01
      • 2012-11-30
      • 1970-01-01
      相关资源
      最近更新 更多