使用 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...'
的评论
我完全不知道如何用新值更新 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...'
的评论