【问题标题】:Replace text in CSV from hashtable从哈希表中替换 CSV 中的文本
【发布时间】:2017-10-15 23:22:43
【问题描述】:

我正在尝试Import-Csv "Newusers.csv",这是从工资系统导出的。我需要将其导入 Active Directory,并且需要为每个用户更新 CSV 文件中的 physicalDeliveryOfficeName 列。

目前,从工资系统中导出的用户使用了站点名称的代码。我需要用站点名称替换此代码。我有一个哈希表,其中包含站点代码 = 站点名称。我有 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'
}

【问题讨论】:

    标签: powershell csv hashtable


    【解决方案1】:

    我有 100 多个站点位置

    在这种情况下,你肯定是在正确的道路上。

    访问哈希表时使用站点代码值作为键:

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

    【讨论】:

    • 感谢您的快速回复。如果我只需要更新 csv 文件(因为这也将用于另一个系统)我需要使用什么命令代替 set-aduser 来更新 csv
    • 使用-Append参数:Export-Csv -Append -Path "C:\xxxxx\File.csv"
    • 对不起,我误解了这个问题,我的错
    【解决方案2】:

    要将 CSV 中的站点代码替换为站点名称,请导入 CSV,修改列,然后将数据导出回 CSV。有几种方法可以解决这个问题,例如通过使用Select-Object 将整个列替换为calculated 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-20
      • 2015-09-03
      • 1970-01-01
      • 2013-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多