2016-05-16 3 views
0

からだから私は、CSVから配列がパワーシェル取り出し線の配列

name,age,height,fruit 
Jon,34,5,orange 
Jane,23,4,apple 
Dave,27,6,pear 

ファイル作成した場合、私は

$list = Import-CSV ..... 

を使用して、これを読むことができますが、今、私は疑問を持っています。

は、だから私は

foreach ($val in $list) 
{ 
    if ($val.name = "jane") {$currentuser = $val} 
} 

write-host $currentuser.name 
write-host $currentuser.age 
write-host $currentuser.hight 
write-host $currentuser.fruit 

をステップ実行するのではなく、これを行うには良い方法はありますが言うことができる「ジェーンを教えて」?私の実際の事例では私は人事部のスタッフとActive Directoryのスタッフのリストを持っています。 私はADでユーザを見つけるためにHRリストを踏み出し、このユーザを変数/オブジェクトとして設定します。 HRからの情報を使用してユーザーを更新します。

上記の方法はうまくいくが、数千人のユーザーからなる2つのリストを凌駕するのは非常に非効率的なようだ。

CSVから作成された配列では、文字列「jane」を入力することで、ジェーンの情報を私が使用できるオブジェクトに戻すメソッドが必要になります。

+0

私が理解すれば、あなたが望むものは次のようになります:*** $ list | ?{$ _。Name -eq 'jane'} *** – EBGreen

+0

また、ありがとうございます – DevilWAH

答えて

1

2つのリストがある場合は、その両方を関連付けることができる別個のキーを使用すると、1つのリストをルックアップテーブルに格納することができます(PowerShellのハッシュテーブルを含む任意のタイプの辞書が行います)。

$HRList = @' 
Name,Position,Department 
John,Manager,Sales 
Bob,Worker,Production 
Sally,Accountant,Finance 
'@ |ConvertFrom-Csv 

$ADList = @' 
Name,Username 
Sally,sallysalt 
Bob,bobburrows 
John,johnjames 
'@ |ConvertFrom-Csv 

# Convert the AD list to a hash table 
$ADLookupTable = @{} 
foreach($ADUser in $ADList) 
{ 
    $ADLookupTable[$ADUser.Name] = $ADUser 
} 

# Go through HR list 
foreach($HRUser in $HRList) 
{ 
    # Now you can find the relevant object in the other list 
    $ADUser = $ADLookupTable[$HRUser.Name] 
    Set-ADUser -Identity $ADUser.Username -Title $ADUser.Position -Department $ADUser.Department 
} 
+0

ありがとうございます。 – DevilWAH

関連する問題