2017-08-17 10 views
1

Active Directoryからユーザーを取得しようとしています。ユーザーのリストはusers.txtファイルに表示されます。私は一括クエリを行うときに、ヘッダー(列名)を保持しながら、CSV内のすべての詳細をエクスポートしたいと思います。また、errors.txtファイルのエラーを処理したい。ここで

は私のコードからの断片である:

$Users = Get-Content .\users.txt 
try { 
    $Users | Get-ADUser -Properties * | select * | Export-Csv export.csv 
} catch { 
    $_ | Out-File errors.txt -Append 
} 

しかし、私が代わりにファイルに画面上のエラーを得ました。たとえば:

 
Get-ADUser : Cannot find an object with identity: 'admin' under: 
'DC=test,DC=dev,DC=net'. 
At line:2 char:14 
+  $Users | Get-ADUser -Properties * | select * | Export-Csv export.csv 
+    ~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : ObjectNotFound: (admin:ADUser) [Get-ADUser], ADIdentityNotFoundException 
    + FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException,Microsoft.ActiveDirectory.Management.Commands.GetADUser 

私はCSVファイルに追加することはできませんのでforeachのようなループを使用する必要はありません。また、私は列の名前を失う。

複数のユーザーに対して$Users | Get-ADUserを実行すると、ファイルのエラーをどのように処理できますか?

+0

なぜあなたはCSVに追加できませんか? –

答えて

1

これは、ErrorActionが正しく設定されていない可能性が高いためです。 Get-ADUserコマンドに-ErrorAction Stopを追加して、それが問題を解決するかどうかを確認してください。そうしないと、キャッチがアクティブにならないことがあります。

詳しくは、画面に表示されるエラーは終了エラーではないため、キャッチをアクティブにしないため、-ErrorAction Stopを指定すると、終了しないエラーがキャッチとキャプチャに入りますテキストファイルのエラーです。ただし、この間にパイプラインを終了させたくない場合は、下記の編集をお読みください。

編集すると、非終了エラーが発生したときにパイプラインが終了しないようにすることができます。そのような場合は、いくつか変更する必要があります。

#Start by clearing out errors before you execute your pipeline code. Do not put a try catch on it. 
$Error.Clear() 
$Users | Get-ADUser -Properties * -ErrorAction SilentlyContinue | select * | Export-Csv export.csv 
$Error | Out-File C:\TEMP\errors.txt -Append 
0

エラーがnon-terminating errorsあるので、それらはtry..catchでキャッチしていません。 Redirectエラーが(潜在的に)失敗したコマンドからファイルに出力され、残りがパイプラインに残ります。ところで、select *は役に立たないので、その部分を削除してください。

$Users | 
    Get-ADUser -Properties * 2>> 'errors.txt' | 
    Export-Csv 'export.csv' -NoType 
関連する問題