1

我的目标是通过简单的 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

不知道我在哪里出错。就我而言,这些列被很好地解析了。

4

2 回答 2

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 架构。我只留下了相关的部分。

希望这会有所帮助

于 2018-04-28T01:24:47.637 回答
0

谢谢大家,我设法完善了我的脚本并让它全部工作。

我是如何解决这个问题的

如上所述,我不得不为脚本使用 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的指导。

于 2018-04-28T10:38:29.400 回答