【问题标题】:Importing CSV Users with a PowerShell Script使用 PowerShell 脚本导入 CSV 用户
【发布时间】:2018-10-08 16:28:19
【问题描述】:

我的目标是通过简单的 PowerShell 脚本将 CSV 文件中的用户导入 Active Directory。尽管如此,我还是遇到了如下所示的语法错误。

更新:CSV 列格式

名字,姓氏,你 史蒂文,布恩,管理 罗德尼,费舍尔,销售 泰勒,包蒂斯塔,管理 内森,莫里斯,管理

工作并解决:PowerShell 代码

Import-Module ActiveDirectory
$ADDSUsers = Import-Csv C:\0469697M_gxt.csv

foreach ($user in $ADDSUsers) {
     $Name = $user.name + " " + $user.surname
     $OU = $user.ou
     $OUPath = "OU=$($OU),dc=intgxt,dc=allaboutfood,dc=com,dc=mt"

     #Creating New AD Users                   
     New-ADUser -Name $Name -Path $OUPath
}   

错误

New-ADUser :对象名称的语法错误 在 C:\Script.ps1:9 char:5 + New-ADUser -Name "$name" -Path "$OU" + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (CN=Tyler Blair,Management:String) [New-ADUser], ADException + FullyQualifiedErrorId :ActiveDirectoryServer:8335,Microsoft.ActiveDirectory.Management.Commands.NewADUser

不知道哪里出错了。就我而言,这些列的解析效果很好。

【问题讨论】:

  • "就我而言,这些列被解析得很好。" - 我猜他们不是。 NotSpecified: (CN=Tyler Blair,Management:String) 对我说 CSV 解析器在 OU 数据上失败了,这应该像 CN=Tyler Blair,OU=This,DC=example,DC=com 并且你的 CSV 没有引用,所以 Import-CSV 用逗号分割 OU,就好像它们是不同的列,然后您正在创建一个没有完整路径的对象,但它失败了。猜测,因为您的代码看起来不正确。或者,您的电子表格中的 OU 可能不是完整路径,需要是
  • 是的,我有一个 ou 列,但没有 DC 列。在错误中,Management 是一个 OU,但我不知道 Management:String 是什么。 @TessellatingHeckler 你有什么建议?
  • 请发布 CSV 样本。随意更改名称,但尽量保持结构完整。通过编辑您的问题而不是评论来做到这一点。
  • @EBGreen 更新了我的 CSV 列并添加了一些数据 - 感谢您的帮助 :)
  • 您的 CSV 管道是分隔的、逗号分隔的还是制表符分隔的。您的示例看起来像标题是管道分隔的(有点),数据是制表符分隔的。您的示例代码暗示它是逗号分隔的。

标签: powershell csv active-directory organizational-unit


【解决方案1】:

IMO,不起作用的是您提供的 -Path 变量。您需要提供活动目录中路径的 DN (distinguishedName)。最简单的方法是获取用户的 DN 并获取父容器 DN。

类似这样的:

-Path 'OU=New User Accounts,OU=Users,DC=compost,DC=is,DC=smelly,DC=com'

另外,我建议您习惯每次都以相同的方式分隔字符串并坚持下去。单引号和双引号的作用不同。除非有空格,否则您不必从源 .csv 中分隔字段名称。

如果您使用单独的容器,只需构造 新的用户对象飞起来。

$OU

一个可行的例子可能是:

开始

    Import-Module ActiveDirectory
    $ADDSUsers = Import-Csv C:\0469697M_gxt.csv
    $Creation_PW = Read-Host -AsSecureString -Prompt "Choose a password"
    foreach ($user in $ADDSUsers) {
    $Container = "OU=$($OU),OU=Users,DC=contoso,DC=com"
    $FirstName = $user.name
    $LastName = $user.surname
    $Account_Name = "$($FirstName) $($LastName)"
    New-ADUser -ChangePasswordAtLogon $true -Enabled $true -Path $Container -GivenName $FirstName -Surname $LastName -Name $Account_Name Description $Description -AccountPassword $Creation_PW }

结束

($Creation_PW 应该是 SecureString)

我从用于我的组织的批量帐户创建脚本中提取了部分。我们有时会这样做。您可以在创建时指定各种属性,具体取决于您的 AD 架构。我只留下了相关的部分。

希望这会有所帮助

【讨论】:

  • 好吧,所以我更新了原始帖子中的代码。假设我有域 - intgxt.allaboutfood.com.mt。我应该如何在 $Container 中解析它? intgxt.allaboutfood.com.mt 是域,然后在其下的 OU 称为: - 帐户 - 管理 - 销售欢呼
  • 很高兴您一切正常。如您所料,LDAP 路径是关键。很抱歉让你挂在悬空变量上。由于我工作的地方,我不得不清理我的脚本。我已经使用该网站有一段时间了,我很高兴能够为他人贡献一些东西。
  • 没问题@Dave。先生,也感谢您为保卫国家所做的贡献:)非常感谢您的帮助
【解决方案2】:

感谢大家,我设法完善了我的脚本并让一切正常运行。

我是如何解决这个问题的

如上所述,我不得不为脚本使用 X.500 路径格式来查找输入用户的位置。 对于和我有同样问题的人,这里是对我有帮助的链接:https://serverfault.com/questions/581383/new-aduser-path-syntax

我还必须使用 -Name 而不是 -GivenName ,然后将 $user.name 和 $user.surname 附加在一起,以便 OU 中的名称显示为 Dave Smith。这取决于您的要求。

此外,必须声明 $($OU),以便脚本知道每个相应用户的 OU。 (在.csv中提供)

如何输入正确的路径(X.500路径格式)

对于遇到此问题并偶然发现此帖子的任何人。

OU > Domain Name

域名中的点由 dc= 分隔 例如:

Admin Organizational Unit in Contoso.com Domain
$OUPath = "OU=Admin,dc=Contoso,dc=com"

HR Organizational Unit in MyOrganization.co.uk Domain
$OUPath = "OU=HR,dc=MyOrganization,dc=co,dc=uk"

Import Organizational Unit in .CSV File
$OUImport = $user.ou (or whatever your ou column name is)
$OUPath = "OU=($OUImport),dc=MyOrganization,dc=co,dc=uk"

代码

Import-module activedirectory
$ADDSUsers = Import-csv C:\0469697M_gxt.csv

write-host "Start Process"
write-host "-------------------------------------"

ForEach ($user in $ADDSUsers){
    $Name = $user.name + " " + $user.surname
    $OU = $user.ou
    $OUPath = "OU=$($OU),dc=intgxt,dc=allaboutfood,dc=com,dc=mt"

    #Creating New AD Users                   
    New-ADUser -Name $Name -Path $OUPath
}

特别感谢 (Dave)https://stackoverflow.com/users/9712731/dave 和 (EBGreen)https://stackoverflow.com/users/1358/ebgreen 的指导。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    • 2021-01-04
    相关资源
    最近更新 更多