使用 Powershell 更新 csv 记录中的活动目录 DN

Updating Active directory DN in csv records with Powershell

我完全不知道如何用新值更新 CSV 文件中的多行。问题如下,我将一个活动目录 csv 导出文件导入到我的 powershell 中,它有大约 500 个用户,就像这样:

$Users = Import-CSV "C:\Users\administrator\userExport.csv"

然后我需要更新 DN 列,以便它们在新域上具有新的活动目录结构

当前结构:

DN:
-----------------
CN=John Smith,OU=Users,DC=XTR,DC=ORG

需要新的域结构

DN:
-----------------
CN=John Smith,OU=Users,OU=Administration,DC=RTS,DC=LIVE,DC=LOCAL

问题是我不知道如何按顺序浏览此 CSV 文件中的条目以通过 powershell 仅更新条目的必要元素,对此的任何帮助将不胜感激。 来自 csv 文件的示例行:

DN                                      objectClass     instanceType
--                                      ------------    ------------
CN=John Smith,OU=Users,DC=XTR,DC=ORG    user                       4

抱歉,我知道这个请求有多么含糊,但我确信一定有一种优雅的方法可以做到这一点,但我的 powershell 知识非常有限。

感谢您的宝贵时间。

Import-Csv 会将 CSV 中的每一行转换为 object,其属性对应于列 headers 和当前行的列值。这使它们易于操作:

$Users = Import-CSV "C:\Users\administrator\userExport.csv"

$Users |ForEach-Object {
  # Update DN column value
  $_.DN = $_.DN -replace ',DC=XTR,DC=ORG$', ',OU=Administration,DC=RTS,DC=LIVE,DC=LOCAL'

  # Output modified object
  $_ 
} |Export-Csv C:\Users\administrator\userExportModified.csv -NoTypeInformation

您应该“按原样”放置 CSV 样本,而不是尝试对其进行格式化。我们如何知道 CSV 是否为 well-formed?

无论如何我都在尝试回答,基于 well-formed CSV,默认分隔符(逗号):

Import-CSV "C:\Users\administrator\sourceUsers.csv" | ForEach {
   $_.DN = $_.DN -replace "OU=Users,DC=XTR,DC=ORG","OU=Users,OU=Administration,DC=RTS,DC=LIVE,DC=LOCAL"
                         # ^
                         # Are you sure it is actually 'OU' here and not 'CN'
   $_
} | Export-Csv "C:\Users\administrator\destinationUsers.csv" -NoTypeInformation -Enconding UTF8

如果有另一个分隔符,例如分号:

 Import-CSV "C:\Users\administrator\sourceUsers.csv" -Delimiter ';' | ForEach {
   $_.DN = $_.DN -replace "OU=Users,DC=XTR,DC=ORG","OU=Users,OU=Administration,DC=RTS,DC=LIVE,DC=LOCAL"
                         # ^
                         # Are you sure it is actually 'OU' here and not 'CN'
   $_
} | Export-Csv "C:\Users\administrator\destinationUsers.csv" -NoTypeInformation -Enconding UTF8

编辑: Mathias 在我自己打字时回答了 :),我保留它只是因为我对 CSV 和 'OU=Users...'

的评论