web-dev-qa-db-ja.com

入力リストを使用してADユーザーのADグループメンバーシップを一覧表示する方法

私はかなり新しいPSユーザーです。ユーザーがメンバーになっているセキュリティグループのリストを取得するために、PowerShellスクリプトに関するサポートを探しています。

必要なものを説明するには:

  • 多くのユーザー(samaccountnames)の入力リスト(txtファイル)があります。すべての名前は新しい行にあります。
  • ADでこれらの名前を検索するスクリプトが必要です-単一のドメインだけでなく、フォレスト全体
  • 出力は「samaccountname」のようになり、このアカウントがメンバーであるグループのリストが1行で表示されるため、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

どんな助けも大歓迎です。

9
Martin_K

最初:現在のところ、$User変数には.Usersプロパティがありません。コードでは、$Userはテキストファイルの1行(foreachループの「現在の」行)を単に表します。

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

第二に、1つのコマンドでフォレスト全体をクエリできるとは思わない。それを小さなチャンクに分割する必要があります。

  1. ドメインのリストのクエリフォレスト
  2. ドメインごとにGet-ADUserを呼び出します(-Credentialパラメーターで代替資格情報を指定する必要がある場合があります)

番目、ユーザーがメンバーになっているグループのリストを取得するには:

$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

4番目:目的の最終的な文字列形式を取得するには、$User.Name、セミコロン、$GroupMembership文字列を一緒に追加します。

$User.SamAccountName + ';' + $GroupMembership;
12
Trevor Sullivan
Get-ADPrincipalGroupMembership username | select name

別の答えからそれを得たが、スクリプトは魔法のように動作します。 :)

6
genius_monkey

以下のコードは、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
}

サンプル出力:

管理者ドメインユーザー管理者スキーマ管理者エンタープライズ管理者ドメイン管理者グループポリシー作成者所有者
ゲストドメインゲストゲスト
 krbtgtドメインユーザーはRODCパスワードレプリケーショングループを拒否しました本番
編集済みドメインユーザーCompanyUsers本番
編集済みドメインユーザーCompanyUsers本番
0
notforsale

または、「ソート名」を追加してアルファベット順にリストします

Get-ADPrincipalGroupMembership username | select name | sort name
0
nilz76