用哈希表替换CSV中的文本

问题描述:

我正在尝试从工资系统导出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' 
} 

我有超过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不能这样工作。 –

要替换站点名称的站点代码在您的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