0

ここで同様の質問を見つけましたが、それは私のニーズに完全には適合せず、そうするために調整するのに苦労しています。

.csv特定の OU 内のすべてのユーザーのファイルを、AD グループのメンバーシップと共に次の形式で作成する必要があります。

User, Group (This is a Header)
User1, Group1
User1, Group2
User1, Group3
User2, Group1
User3, Group1
User4, Group1
User4, Group2

このスクリプトは、ほとんどの方法で私をそこに連れて行ってくれると思います:

$Users = Get-ADGroup -SearchBase "OU=OrgUnit1,OU=OrgUnit2,OU=OrgUnit3,DC=XXX,DC=LOCAL" -Filter * `
    | Get-ADGroupMember -Recursive `
    | ForEach-Object { Get-ADUser $_ –Properties MemberOf | Select SamAccountName, MemberOf; } `
    | Sort-Object SamAccountName
    | export-csv C:\Messaging\PowerShell\ADUsers\Test1.csv

これには 2 つの問題があります。

  1. OU=OrgUnit1サブ OU が常に同じであるとは限らないため、完全な識別名を検索せずに検索したいと考えています。

  2. 出力には AD グループの.csv完全な識別名が含まれており、修飾子のないグループの名前だけが必要です

4

2 に答える 2

1

検索する OU を取得するために使用Get-ADOrganizationalUnitします。

$ou = Get-ADOrganizationalUnit -Filter "Name -eq 'OrgUnit1'"
Get-ADGroup -Filter * -SearchBase $ou | ...

このmemberOfプロパティーは、グループ (またはその識別名) のリストです。必要な出力を取得するには、グループ名を展開して解決し、目的のプロパティを持つ新しいカスタム オブジェクトを作成する必要があります。

... | ForEach-Object {
  $account = $_.SamAccountName
  $_.MemberOf | Get-ADGroup | ForEach-Object {
    New-Object -Type PSCustomObject -Property @{
      SamAccountName = $account
      Group          = $_.Name
    }
  }
} | ...

$Usersまた、パイプラインの最後で出力をファイルにエクスポートする場合、パイプライン出力を変数 ( ) に割り当てても意味がありません。

変更されたコード:

$ou = Get-ADOrganizationalUnit -Filter "Name -eq 'OrgUnit1'"
Get-ADGroup -Filter * -SearchBase $ou |
  Get-ADGroupMember -Recursive |
  ForEach-Object { Get-ADUser $_ -Properties MemberOf; } |
  Sort-Object SamAccountName |
  ForEach-Object {
    $account = $_.SamAccountName
    $_.MemberOf | Get-ADGroup | ForEach-Object {
      New-Object -Type PSCustomObject -Property @{
        SamAccountName = $account
        Group          = $_.Name
      }
    }
  } | Export-Csv 'C:\Messaging\PowerShell\ADUsers\Test1.csv'
于 2015-09-14T19:25:32.897 に答える