2017-07-25 13 views
1

私はこれでグループ内のすべてのユーザーが表示されています:私はCSVに出力するこれをしたいが、私が行うとき、それぞれの行がそうそこループの次の行で上書きなっているように、それが見えますpowershellを使ってforeachをCSVに出力するには?

Import-Module ActiveDirectory 

$Groups = Get-ADGroup -Filter {name -like "UC_*"} | Select -ExpandProperty Name # UC_* is my group 

foreach ($Group in $Groups){ 
Write-Output "Group" 
Write-Output "-----" 
$Group 
Write-Output "" 
Get-ADGroupMember -Identity $Group | select -Property Name, samaccountname 
Write-Output "" 
} 

をCSVにデータがありません。これは正常に動作しません。

# Get users in a group or groups 

Import-Module ActiveDirectory 


Function Get-Users { 
    $Groups = Get-ADGroup -Filter {name -like "UC_*"} | Select -ExpandProperty Name # UC_* is my group 

    foreach ($Group in $Groups){ 
    Write-Output "Group" 
    Write-Output "-----" 
    $Group 
    Write-Output "" 
    Get-ADGroupMember -Identity $Group | select -Property Name, samaccountname 
    Write-Output "" 
    } 
} 

Get-Users | export-csv "c:\temp\myfile.csv" 

どのようにしてすべてのコンテンツをCSVに正しく出力できますか?

$Groups = Get-ADGroup -Filter {name -like "UC_*"} | Select -ExpandProperty Name # UC_* is my group 

$Groups | Export-Csv "c:\temp\myfile.csv" -NoTypeInformation 
+1

脇に:スクリプトブロック( '{...}')を '-Filter'引数として使用することは、この_particular_のケースでは機能しますが、悪い考えです。 [この回答](https://stackoverflow.com/a/44184818/45375)(私の)を参照してください。 – mklement0

答えて

3

関数の出力はWrite-output$Group、およびGet-ADGroupMemberから返されたオブジェクトです。この異なるオブジェクトのコレクションは、Export-CSVでエクスポートすることはできませんが、Out-Fileを介してテキストドキュメントのためのものになります。

あなたはCSVファイルにエクスポートする場合は、エクスポートするプロパティと一致するオブジェクトのコレクションを作成する必要があります。

だから我々はForEach-Objectと、各グループをループよ、とグループメンバーシップを保存します$membersにあります。その後、foreachでループすることができます。これは、$_のループの情報を引き続き使用して、グループの名前を取得し、ユーザ情報を$memberにして、すべてのユーザのオブジェクトを作成します@ mklement0述べたようにまた[pscustomobject]

Get-ADGroup -Filter "name -like 'UC_*'" | 
    ForEach-Object { 
     $members = Get-ADGroupMember $_ 
     foreach ($member in $members) { 
      [pscustomobject]@{ 
       "Group Name"  = $_.Name 
       "SamAccountName" = $member.SamAccountName 
       "User Name"  = $member.name 
      } 
     } 
    } | 
    Export-Csv "c:\temp\myfile.csv" 

を行うことが必要とする、それがADコマンドレットにフィルタをスクリプトブロックの使用しないことをお勧めです。ここにはHis excellent answerの詳細が記載されています。

0

Export-CSVを使用すると、既に存在するファイルが上書きされます。したがって、すべてを変数に入れてCSVに出力したり、Export-CSVコマンドレット呼び出しに-Appendを追加することができます。これは、データを上書きするのではなく、データを追加します。

0

CSVに出力するための2つのオプションがあります。これについてはどのよう

+0

私はそれを上書きしたい。 – Prox

0

あなたの関数で解析しているデータをオブジェクトに格納します。

は例えば、私は上記のコードをテストしていない

$users = @() 

$groups = Get-ADGroup -Filter {name -like "UC_*"} | Select -ExpandProperty Name 

$groups | % { 

    $group | New-Object System.Object 
    $group | Add-Member -MemberType NoteProperty -Name GroupName -Value $_ 

     Get-ADGroupMember -Identity $_ | Select -Property Name, samaccountname | % { 

$group | Add-Member -MemberType NoteProperty -Name MemberName -Value $_.Name 
$group | Add-Member -MemberType NoteProperty -Name samaccountname -Value $_.samaccountname 


} 


    $users += $group 

} 

...このような何かに...

$Groups = Get-ADGroup -Filter {name -like "UC_*"} | Select -ExpandProperty Name # UC_* is my group 

foreach ($Group in $Groups){ 
Write-Output "Group" 
Write-Output "-----" 
$Group 
Write-Output "" 
Get-ADGroupMember -Identity $Group | select -Property Name, samaccountname 
Write-Output "" 

...これを変更し、うまくいけばそれが役立ちます。

+0

私は '$ group.members'が文字列ではなくオブジェクトになることをここで問題にすると思います。解決法は、 'Out-String'を使うか、あるいはユーザごとにオブジェクトを作ることです。 'Export-CSV'でのみ出力できます – BenH

+0

良い点。私はそれを世話するようにさらに編集しましたが、それは書式設定を台無しにしましたが、私はそれを修正する方法がわかりません。基礎となるコードブロックのマークアップを見る方法はありますか? – ZenoArrow

関連する問題