我的目标是通过简单的PowerShell脚本将CSV文件中的用户导入Active Directory。尽管如此,我还是遇到了语法错误,如下所示。
name,surname,ou Steven,Boone,Management Rodney,Fisher,Sales Taylor,Bautista,Management Nathan,Morris,Management
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 : The object name has bad syntax At 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
不确定我在哪里有错误。据我所知,列正在被很好地解析。
答案 0 :(得分:1)
IMO,不起作用的是您正在提供的-Path变量。您需要在活动目录中提供路径的DN(distinguishedName)。最简单的方法是获取用户的DN并获取父容器DN。
这样的事情:
-Path' OU =新用户帐户,OU =用户,DC =堆肥,DC = is,DC =臭,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架构。我只留下了相关的部分。
希望这有助于
答案 1 :(得分:0)
谢天谢地,我设法完善了我的脚本并让它全部正常工作。
如上所述,我不得不在脚本中使用X.500路径格式来查找输入用户的位置。 对于与我有同样问题的人,以下链接帮助了我:https://serverfault.com/questions/581383/new-aduser-path-syntax
我还必须使用-Name而不是-GivenName,然后将$ user.name和$ user.surname附加在一起,以便OU中的名称显示为Dave Smith。这取决于您的要求。
此外,必须声明$($ OU),以便脚本知道每个相应用户的OU。 (在.csv中提供)
对于任何遇到这个问题的人而言,都会发现这个帖子。
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的指导。