使用PowerShell脚本导入CSV用户

时间:2018-04-27 19:16:21

标签: powershell csv active-directory organizational-unit

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

更新:CSV列格式

name,surname,ou
Steven,Boone,Management
Rodney,Fisher,Sales
Taylor,Bautista,Management
Nathan,Morris,Management

工作和解决: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 : 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

不确定我在哪里有错误。据我所知,列正在被很好地解析。

2 个答案:

答案 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中提供)

如何输入正确的路径(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的指导。