0

大規模な監査が近づいており、指名されたすべての従業員の AD コンピューター アカウントが無効化されていることを確認したいと考えています。私たちが使用する一意の識別子を持つ .csv があります。私たちのスキーマには、ADcomputer Name プロパティの途中にその ID が含まれています。インポートされた csv オブジェクトとそのプロパティをフィルターに正しくパイプするのに非常に問題があります。おもう。よくわかりません。これは私が試してきたことのようなものです。

Import-Csv termname.csv | ForEach-Object
{ Get-ADComputer -Filter { Name -Contains "$($_.id)" } } |
Export-Csv termcomp.csv -NoTypeInformation

この「スクリプト」は、まったくコンテンツを取得していませんでしたが、テストしたときにそれを知っています

Get-ADComputer -Filter { Name -Contains $id } 

その一意の ID はどこに$idあり、AD コンピューター オブジェクトにヒットします。同様に、このブロックをテストします

Import-Csv termname.csv | ForEach-Object { Get-ADComputer { Name -Contains $_.id } 

PowerShell のエラーは次のとおりです。

..."Property 'id' not found in object of type: 'System.Management.Automation.PSCustomObject'.

この場合の「オブジェクト」とは何かを誤解していると思います。インポートされた配列全体は、.id のプロパティを持つオブジェクトですか? それとも、各行は .id プロパティを持つ独自のオブジェクトですか? いずれにせよ、PowerShell がパイプライン オブジェクトに対してこれほど強い反対を唱えるのはなぜでしょうか。

このプロセス全体を行うための完全に良い方法はありますか? 私はどういうわけか全体の混乱を考えすぎていますか?

アップデート

要求に応じて、csv ファイルのサンプル コンテンツ。代わりにワイルドカードを使用するという提案を受けて、ワイルドカードを .csv 自体に入れましたが、これもまた、最も洗練されたソリューションではない可能性があります。しかし、それが機能する限り!Notepad++ からコピーしたサンプルを次に示します。

id
*rstarr56*
*jlennon58*
*pmcartney74*
*gharrison68*
4

2 に答える 2

3

したがって、CSV ファイルに「ID」ヘッダーが含まれていないように見えます。そのため、使用可能なプロパティではありません。CSV ファイルの内容を確認することで簡単に修正できます。すべてが正しい場合は、実行Import-Csv termname.csv | ForEach-Object { Write-Host $_.id }して確認してください。プロパティが正しく表示されます。ただし、その演算子は配列に特定の値が含まれているかどうかを確認するためのものであるため、ここでの使用にも問題が-Containsあります。使用する必要がありますName -Like "*$($_.id)*"

于 2016-12-02T16:24:09.353 に答える
1

After hours of digging, I found an answer here:

Import-CSV and Foreach to use Get-ADUser

Thanks especially to Mike for some great thinking about -Like and how to test the success of the code.

The line that ended up working was:

Import-Csv termname.csv | ForEach-Object {
   Get-ADComputer -Filter "Name -Like '*$($_.id)*'"
} | Export-Csv termout.csv

Apparently, Powershell hates {{}}.

Thanks again, all!

于 2016-12-03T18:43:09.307 に答える