如何使用输入列表列出AD用户的AD组成员资格?

时间:2014-01-20 15:38:34

标签: powershell active-directory membership

我是相当新的PS用户...寻找PowerShell脚本的一些帮助,以获取用户所属的安全组列表。

描述我需要的东西:

  • 我有许多用户的输入列表(txt文件)(samaccountnames)。每个名字都在新的一行。
  • 我需要脚本在AD中搜索这些名称 - 整个林,而不仅仅是一个域
  • 输出应该看起来像“samaccountname”和此帐户在一行中成员的组列表,因此我可以在excel中对其进行排序

这是我的脚本:

$users = Get-Content C:\users.txt

ForEach ($User in $users) {
  $getmembership = Get-ADUser $User.Users -Properties MemberOf | Select -ExpandProperty memberof
  $getmembership | Out-File -Append c:\membership.txt 
}

但它给我一个错误:

Get-ADUser : Cannot validate argument on parameter 'Identity'. The argument is null. Supply a non-null argument and try the command again.
At line:4 char:28
+ $getmembership = Get-ADUser <<<<  $User.Users -Properties MemberOf | Select -ExpandProperty memberof
    + CategoryInfo          : InvalidData: (:) [Get-ADUser], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.GetADUser

无论如何,这个脚本不会搜索整个森林。

示例输入列表:

username1
username2
username3
username4... etc

示例输出列表

username1;group1;group2;group3
username2;group1;group2;group3;group4... etc or something similar

非常感谢任何帮助。

5 个答案:

答案 0 :(得分:12)

首先:就目前而言,$User变量没有.Users属性。在您的代码中,$User只是表示文本文件中的一行(foreach循环中的“当前”行)。

$getmembership = Get-ADUser $User -Properties MemberOf | Select -ExpandProperty memberof

其次,我不相信您可以使用一个命令查询整个林。您将不得不将其分解为更小的块:

  1. 查询林的域名列表
  2. 为每个域调用Get-ADUser(您可能必须通过-Credential参数指定备用凭据
  3. 第三,获取用户所属的群组列表:

    $User = Get-ADUser -Identity trevor -Properties *;
    $GroupMembership = ($user.memberof | % { (Get-ADGroup $_).Name; }) -join ';';
    
    # Result:
    Orchestrator Users Group;ConfigMgr Administrators;Service Manager Admins;Domain Admins;Schema Admins
    

    第四:要获得最终的所需字符串格式,只需将$User.Name,分号和$GroupMembership字符串一起添加:

    $User.SamAccountName + ';' + $GroupMembership;
    

答案 1 :(得分:7)

Get-ADPrincipalGroupMembership username | select name

从另一个答案得到它,但脚本是神奇的。 :)

答案 2 :(得分:1)

或者按字母顺序添加“排序名称”

Get-ADPrincipalGroupMembership username | select name | sort name

答案 3 :(得分:0)

以下代码将使用samaccountname返回用户名组成员身份。您可以修改它以从文件获取输入或更改查询以获取具有非过期密码等的帐户

$location = "c:\temp\Peace2.txt"
$users = (get-aduser -filter *).samaccountname
$le = $users.length
for($i = 0; $i -lt $le; $i++){
  $output = (get-aduser $users[$i] | Get-ADPrincipalGroupMembership).name
  $users[$i] + " " + $output 
  $z =  $users[$i] + " " + $output 
  add-content $location $z
}

示例输出:

Administrator Domain Users Administrators Schema Admins Enterprise Admins Domain Admins Group Policy Creator Owners
Guest Domain Guests Guests
krbtgt Domain Users Denied RODC Password Replication Group
Redacted Domain Users CompanyUsers Production
Redacted Domain Users CompanyUsers Production
Redacted Domain Users CompanyUsers Production

答案 4 :(得分:-2)

一行中的所有内容:

get-aduser -filter * -Properties memberof | select name, @{ l="GroupMembership"; e={$_.memberof  -join ";"  } } | export-csv membership.csv