2017-10-15 58 views
0

我正在嘗試從工資系統導出Import-Csv "Newusers.csv"。我需要將其導入Active Directory,並需要爲每個用戶更新CSV文件中的physicalDeliveryOfficeName列。用哈希表替換CSV中的文本

當前從工資系統用戶導出了sitename的代碼。我需要用網站名稱替換此代碼。我有一個散列表,它的網站代碼=網站名稱。我有超過100個網站位置。

$hashtable = @{ 
    28 = 'Example Site 1' 
    29 = 'Example Site 2' 
    36 = 'Example Site 3' 
    37 = 'Example Site 4' 
    50 = 'Example Site 5' 
    51 = 'Example Site 6' 
    52 = 'Example Site 7' 
    53 = 'Example Site 8' 
} 

回答

2

我有超過100個站點位置

在你肯定是在正確的道路上的情況。

Import-Csv newusers.csv |ForEach-Object { 
    Set-ADUser -Identity $_.username -replace @{physicalDeliveryOffice=$hashtable[$_.sitecode]} 
} 
+0

感謝您的快速回復。如果我需要更新csv文件(因爲這也將用於另一個系統)什麼是我需要使用set-aduser的命令來更新csv – Lee

+0

使用'-Append'參數:'Export- Csv -Append -Path「C:\ xxxxx \ File.csv」' – Manu

+0

@Manu不能這樣工作。 –

1

要替換站點名稱的站點代碼在您的CSV導入CSV,修改列,然後將數據導出回:

訪問哈希表時,請使用本站的編碼值的關鍵CSV。有幾種方法可以解決這個問題,例如通過更換使用Select-Objectcalculated property整列:

$file = 'C:\path\to\newusers.csv' 
(Import-Csv $file) | 
    Select-Object *,@{n='SiteName';e={$hashtable[$_.sitecode]}} -Exclude sitecode | 
    Export-Csv $file -NoType 

或通過簡單地在一個循環改變的列中的值:

$file = 'C:\path\to\newusers.csv' 
$csv = Import-Csv $file 
foreach ($record in $csv) { 
    $record.sitecode = $hashtable[$_.sitecode] 
} 
$csv | Export-Csv $file -NoType