我在网上找到了这个脚本 . 它是原始设计用于获取一个安全组的所有成员,如果有嵌套组,它将向主机写入嵌套组名称和层次结构形式的成员 .

我将其调整为从CSV文件导入AD安全组,并将结果导出为具有表格格式的CSV . CSV文件有两个安全组,两个安全组都有嵌套组 . 脚本将仅列出第二个安全组中的用户,但不会列出嵌套的安全组 .

enter image description here

CSV文件格式:

Groupname     groupad          name
test.testdl office\test.testdl  test.testdl
test.testsg office\test.testsg  test.testsg
Import-Module ActiveDirectory

$GroupList = @{}

$Table = @()
$Record = @{
    "Name" = ""
    "nested" = ""
    "domain" = ""
    "userName" =""
}

function Get-GroupHierarchy {
    param()

    $searchGroups = Import-Csv -Path C:\temp\ad1.csv
    foreach ($item in $searchGroups) {
        $groupMember = Get-ADGroupMember -Identity $item.Groupname |
                       Select-Object name, samaccountname, distinguishedName, objectClass
    }
}

foreach ($member in $groupMember) {
    $username = $member.samaccountname
    $distinguishedName = $member.distinguishedName
    $dc = [regex]::Match($distinguishedName,'DC=([^,|$]+)').Groups[1].Value
    $domainuser = '{0}\{1}' -f $dc, $username

    $Record."userName" = $member.samaccountname
    $Record."Name" = $member.name
    $Record."nested" = $member.objectclass
    $Record."Domain" = $domainuser
    $objRecord = New-Object PSObject -Property $Record
    $Table += [array]$objrecord

    if ($member.ObjectClass -eq "group") {
        $GroupList.add($member.name, $member.name)
        Get-GroupHierarchy $member.name
    }

    Get-GroupHierarchy
}

$Table | Export-Csv "C:\temp\SecurityGroups01.csv" -NoTypeInformation

错误信息:

Get-ADGroupMember : Cannot validate argument on parameter 'Identity'. The
argument is null or empty. Provide an argument that is not null or empty, and
then try the command again.
At line:1 char:48
+ $groupMember = Get-ADGroupMember -Identity $item.name | Select-Object name, ...
+ ~~~~~~~~~~