2017-02-06 3 views
1

ドメイン内のすべてのセキュリティグループとそのアカウントステータス(有効または無効)を含むすべてのメンバーのCSVを返そうとしていますが、参加方法を理解できないようですADGroupMemberからADUserへ$Member.ObjectClassの値をテストしようとしていたのですが、 "user"がGet-ADUserを実行しても動作しないようです - すべてのADGroupMemberオブジェクトクラスはユーザーとして表示されます。可能であれば、1つのクエリで実行したいと考えています。私はウェブから例をとって、成功せずにそれを修正しようとしました。私はこのようなフォーマットされた表/ csvファイルに結果を探していますユーザーアカウント有効状態のGet-ADGroupメンバー

Screenshot for formatting

GroupName Name  ObjectClass  Enabled 
GroupA  John Smith User   True 
GroupB  Jane Brown User   False 
GroupB  GroupN  Group   NA/Group

$Table = @() 

$Record = [ordered]@{ 
    "GroupName" = "" 
    "Name" = "" 
    "ObjectClass" = "" 
    "Enabled" = "" 
} 

$Groups = Get-AdGroup -Filter * | 
      Where {$_.Name -like "FS01*" -or $_.Name -like "ABC*"} | 
      Select Name -ExpandProperty Name 
foreach ($Group in $Groups) { 
    $ArrayMembers = Get-ADGroupMember -Identity $Group | 
        Select Name, ObjectClass #, SamAccountName 

    foreach ($Member in $ArrayMembers) { 
     $Record."Enabled" = Get-ADGroupMember -Identity $Group | 
          Get-ADUser | 
          Select Enabled 
     $Record."GroupName" = $Group 
     $Record."Name" = $Member.Name 
     $Record."ObjectClass" = $Member.ObjectClass 

     $objRecord = New-Object PSObject -Property $Record 
     $Table += $objRecord 
    } 
} 
$Table # | Export-Csv $filename -NoTypeInformation 
+0

何が問題なのですか?私はそれをテストするADドメインを持っていませんが、これは "音"に見えます – 4c74356b41

+0

いくつかのことは機能していませんでした。最初にGet-ADGroupMemberを使用すると、3つのグループからエラーが返されました。これは、グループの表示名がSAMのアカウント名と異なるためです。第2に、上記の3つのエラーを除いてリストには表示されませんでしたが、ユーザーまたはグループをチェックし、ObjectClassの場合はGet-ADUserを実行するifステートメントを入れると、そのメンバーのObjectClassをチェックしようとしませんでしたユーザーであれば、すべての行のObjectTypeとしてユーザーのみが表示されます。 if thenを正しく動作させることができませんでした。 – Scott

+0

これが馬鹿げた方法であると見なされない限り、学習目的のために元々働くことに興味があります。 Ansgarの例は確かにより簡潔に見え、今後もそれを使用します! – Scott

答えて

0

は、彼らが必要以上に物事をより複雑にしないでください。 Select-Objectを使用して、グループメンバーから名前とオブジェクトクラスを選択し、グループ名と有効なステータスをcalculated propertiesで注入します。

Get-ADGroup -Filter * | Where-Object { 
    $_.Name -like 'FS01*' -or 
    $_.Name -like 'ABC*' 
} | ForEach-Object { 
    $groupname = $_.Name 
    Get-ADGroupMember -Identity $_ | 
    Select-Object @{n='GroupName';e={$groupname}}, Name, ObjectClass, 
        @{n='Enabled';e={if ($_.ObjectClass -eq 'user') { 
        Get-ADUser $_ | Select-Object -Expand Enabled 
        } else { 
        'NA/Group' 
        }}} 
} | Export-Csv 'C:\path\to\output.csv' -NoType 
+0

ありがとうAnsgar!あなたの例は素晴らしいです。 "Select-Object @ {n = 'GroupName'; e = {$ groupname}}"(n =とe =)を前に見たわけではないので、私の例はもっと複雑に思えますが、 PSの専門家(明らかに)。私はそれがどのように動作するかについていくつかの読書をします。家で見ている人のために最後のパイプの前に最後にあまりに多くのブレースが1つあります。 – Scott

+0

あなたは答えを編集できます@Scott – 4c74356b41

+0

@Scott 'n'は' Name'の略で、 'e'は' Expression'の略です。詳しい説明は、私の答えにあるリンクをご覧ください。 –

関連する問題