2017-05-10 10 views
0

次のpowershellスクリプトがあります。すべての結果をファイルにエクスポートする方法は不明です。ここでは、好ましくは、CSV形式でPowershellの結果をファイルにエクスポートする必要があります

を$コンピュータ、$ Group.Name、$名を持っている必要があり、私のクエリは

$Computer = "ChynaSyndrome" 

$Computer = [ADSI]"WinNT://$Computer" 
$Groups = $Computer.psbase.Children | Where {$_.psbase.schemaClassName -eq "group"} 

ForEach ($Group In $Groups) 
{ 
    "Group: " + $Group.Name 
    $Members = @($Group.psbase.Invoke("Members")) 
    ForEach ($Member In $Members) 
    { 
     $Class = $Member.GetType().InvokeMember("Class", 'GetProperty', $Null, $Member, $Null) 
     $Name = $Member.GetType().InvokeMember("Name", 'GetProperty', $Null, $Member, $Null) 
     "-- Member: $Name ($Class)" 
    } 

} 

答えて

1

ですこれはまだあなたが出力をコンソール与えるだろうが、それが見つかりました。各メンバーとのPSObjectを構築しますその後、グループ内のオブジェクトを$results配列に追加します。完了したら、結果の配列をGridViewのポップアップウィンドウに表示するか、デスクトップ上のCSVにエクスポートするかを選択できます。

**アップデート:コメントごとに、スクリプトをパラメータ化して、呼び出しプロセスがコンピュータ名の配列(または1つ)を提供できるようにしました。このように動作しますが、バッチファイルから、このスクリプトを呼び出す:

powershell.exe -File "C:\script.ps1" -ComputerName "ChynaSyndrome","ChynaSyndrome2","ChynaSyndrome3" 

Script.ps1:

Param 
(
    [parameter(Mandatory=$true,Position=0)] 
    [String[]] 
    $ComputerName 
) 
Begin { 
    $results = @() 
} 
Process { 
    foreach ($Computer in $ComputerName) { 
     $ComputerADSI = [ADSI]"WinNT://$Computer" 
     $Groups = $ComputerADSI.psbase.Children | Where-Object {$_.psbase.schemaClassName -eq "group"} 

     ForEach ($Group In $Groups) { 
      "Group: " + $Group.Name 
      $Members = @($Group.psbase.Invoke("Members")) 
      ForEach ($Member In $Members) { 
       $Class = $Member.GetType().InvokeMember("Class", 'GetProperty', $Null, $Member, $Null) 
       $Name = $Member.GetType().InvokeMember("Name", 'GetProperty', $Null, $Member, $Null) 
       "-- Member: $Name ($Class)" 
       $object = New-Object PSObject -Property @{ 
        Computer = $Computer 
        GroupName = $Group.Name.ToString() 
        MemberName = $Name.ToString() 
        MemberClass = $Class 
       } 
       $results += $object 
      } 
     } 
    } 
} 
End { 
    # Export results to CSV on your Desktop 
    $results | Export-Csv -NoTypeInformation "$env:USERPROFILE\Desktop\GroupResults.csv" -Force 
} 
+0

グループ名とメンバー名のために、私は、 "System.DirectoryServices.DirectoryEntryを" "System.DirectoryServices.PropertyValueCollection" を取得します輸出の –

+0

解決する私の答えを更新! 'GroupName'と' MemberName'は、オブジェクトを文字列にキャストするためにnowを呼び出した 'ToString()'メソッドを持っています。また、 '[ADSI]'行を更新して、オブジェクトにオブジェクトを追加したときにコンピュータ名が保持されるようにしました。それがどのように機能するか教えてください! –

+0

これはうまくいく、今私はどのようにps1ファイルに入れるのだろうか?私はこれをコマンドラインからバッチファイルを使って呼び出したいと思っています –

関連する問題