0

这个脚本有点倒退,因为它需要返回用户所属的所有组。我让脚本工作,但它只返回导入文件中第一个用户的组,并为每个其他用户复制相同的组。

输入内容的示例:

"NetworkID","DisplayName"
"jasonid",Jason
anotherid
"mikeid","Mens, Mike"

我对 powershell(带有 AD 模块的第 2 版)相对较新,因此将不胜感激。这是我创建的脚本:

$out = @()

Import-Csv "$env:userprofile\Desktop\ADUsers.txt" | SELECT NetworkID | ForEach { 
$NetworkIDs = $_

ForEach ($NetworkID in $NetworkIDs) 
    {

    ForEach ($group in $groups) 
        {
            $obj = New-Object -TypeName PSObject

            $obj | Add-Member -MemberType NoteProperty -Name UserName -Value $NetworkIDs.NetworkID
            $obj | Add-Member -MemberType NoteProperty -Name GroupName -Value $group.name

            $out += $obj
        }
    }
}

$out | Format-table -AutoSize
$out | Export-Csv -path $env:userprofile\Desktop\ADUsers.csv –NoTypeInformation 

输出的一个例子是:

"UserName","GroupName"
"jasonid","Domain Group 1"
"jasonid","Domain Group 2"
"jasonid","Domain Group 3"
"anotherid","Domain Group 1"
"anotherid","Domain Group 2"
"anotherid","Domain Group 3"
"mikeid","Domain Group 1"
"mikeid","Domain Group 2"
"mikeid","Domain Group 3"

我 100% 确信“jasonid”是所有 3 个组的成员,“anotherid”不是“Domain Group 1”的成员,“mikeid”不是“Domain Group 3”的成员。

4

1 回答 1

0

有这么多嵌套的 ForEach 循环,这看起来相当复杂。让我们尝试简化它...

这将加载 ActiveDirectory 模块,以便我们可以在 AD 中查找用户。然后它就像你一样制作空数组。然后,当它加载 CSV 时,它会选择并展开 NetworkID 属性并将其传递到管道中。我这样做的原因是,在管道中我们可以直接寻址字符串而不是具有 NetworkID 属性的对象($_.NetworkID不需要,只需$_)。

然后我从 AD 中提取用户的信息,并在用户的 MemberOf 属性上运行 ForEach,就像你一样为每个组添加一个条目。我以稍微不同的方式形成了新对象,因此所有属性都在那里开始,而不是创建一个对象,然后向它添加一个属性,然后向它添加另一个属性。它读起来非常相似,但更简单。

Import-Module ActiveDirectory -ea sc
$out = @()

Import-Csv "$env:userprofile\Desktop\ADUsers.txt" | SELECT -Expand NetworkID | ForEach { 
    $User = Get-ADUser $_ -Prop MemberOf
    ForEach ($group in $User.MemberOf) {
        $obj = New-Object -TypeName PSObject -Property @{
            UserName = $User.samAccountName
            GroupName = $group  -replace "(CN=)(.+?)(,OU=.*)", "`$2"
        }
        $out += $obj
    }
}

$out | Format-table -AutoSize
$out | Export-Csv -path $env:userprofile\Desktop\ADUsers.csv –NoTypeInformation 

所以,就像我回应的大多数与 AD 组相关的事情一样,我们在这里有一个警告......这不涉及嵌套组。如果你想深入嵌套组,那么事情就会变得更加复杂,我们最好创建一个函数来做到这一点。作为嵌套组的示例,您可以查看我对这个问题的回答中最后一个脚本块中的 GetNestedUsers 函数。

于 2014-05-02T17:18:16.847 回答