これは、シナリオに合わせて、データの収集/列挙とCSVファイルの作成に対応できる汎用コード構造です。職場でも似たような使い方をしています。いくつかのエラー処理が含まれています。あなたが望む最後のものは、CSVファイルの不正確な結果です。
# Create an array from a data source:
$dataArray = import-csv "C:\temp\users.csv"
# Create an array to store results of foreach loop:
$arrayOfHashtables = @()
# Loop the data array, doing additional work to create our custom data for the CSV file:
foreach($item in $dataArray)
{
try
{
$ADObject = Get-ADUser -Filter { EmployeeID -eq $item.MyID } -Properties DisplayName,Division -ErrorAction Stop
}
catch
{
Write-Output "$($item.MyID): Error looking up this ID. Error was $($Error[0].Exception.Message)"
}
if($ADObject)
{
# Create a hashtable to store information about a single item:
$hashTable = [ordered]@{
EmployeeID=$item.myID
DisplayName=$ADObject.DisplayName
}
# Add the hashtable into the results array:
$arrayOfHashtables += (New-Object -TypeName PSObject -Property $hashTable)
}
else
{
Write-Output "$($item.MyID): No result found for this ID."
}
}
# If the results array was populated, export it:
if($arrayOfHashtables.Count -gt 0)
{
$arrayOfHashtables | Export-CSV -Path "C:\Temp\Results.csv" -Confirm:$false -NoTypeInformation
}
他のところで述べたように、divisionはADオブジェクトのプロパティではないため、このデータを別の場所で参照する必要があります。 foreachループの中で別の行のPowerShellでこれを行うことができる場合、ハッシュテーブルオブジェクトにこれを次のように追加することができます。
$hashTable = [ordered]@{
EmployeeID=$item.myID
DisplayName=$ADObject.DisplayName
Division=$DivisionFromOtherSource
}
ありがとう、私はそのプロパティについては気づいていませんでした。私は情報が必要なので、私は部門を落としましたextensionAttributeにもあります。 HRから送られたCSVファイルを見てSamAccountNameに基づいてやりました。書式設定は全面的に行われ、表示名と拡張属性を取得できました。 HRの役割が新しいAD統合システムの役割を果たすとき、私はそれを愛しています。 –