Powershell new-ADUser问题

时间:2016-03-10 20:01:32

标签: server windows-server-2012 powershell-v4.0

$userarray = import-csv "userlist.csv"

foreach ($user in $userarray){
    $login = $user.username
    $gname = $user.firstname
    $sname = $user.lastname
    $fname = $gname + " " + $sname
    $passw = ConvertTo-SecureString $user.password -AsPlainText -Force
    $email = $user.email
    $dptmt = $user.department
    $hodir = "\\BYFS01\Home$\$login"
    $madou = "OU=$dptmt,OU=Staff,DC=breezeyob.v11a,DC=.org"

    New-ADUser -SamAccountName $login -UserPrincipalName $email     -Name     $fname -GivenName $gname -Surname $sname -EmailAddress $email     -AccountPassword $passw -Enabled 1 -Path $madou -HomeDrive "Z:"     -HomeDirectory $hodir

}

这是我目前的代码。我的CSV具有所有正确的标题,它们也是有序的。

我运行时遇到的错误是(每个用户都会发生错误,没有任何内容输入AD-用户和计算机:

Error screen

所以我的问题是,为什么我会收到此错误?如果你想看到我的CSV让我知道!

2 个答案:

答案 0 :(得分:0)

以下是您的命令的子问题:

$email = $user.email
$madou = "OU=$dptmt,OU=Staff,DC=breezeyob.v11a,DC=.org"

命令的帮助表明值必须是常量。问题来自$ email对另一个变量$ user的依赖。变量$ user依次依赖于另一个变量$ userarray。变量中的这么多变量是不稳定的(从PowerShell的角度来看)。

尝试在您的$ email变量中获取类似以下的值,然后在ad-hoc HashTable中初始化它:

$email = 'email@company.org'

请注意,您不必像我的示例那样明确明确。它也可以是这样的:

$email = $anotherVariable

这里的关键是$ anothervariable指向像

这样的值
'email@company.org' 

而不是

"email@$DontKnowThisYetVariable.org"

请考虑以下事项:

$login = $user.username

此声明很可能不会导致任何问题,因为您的变量'$ user.username'指向CSV中某处的字符串常量,如“Calvin”或“Hobbes”。

我相信,如果您的变量指向常量值,您的命令将顺利运行。当我创建一个快速而肮脏的Active Directory域时,我重现了同样的错误。我在我的超级新AD域中运行了以下内容,它起作用了:

$userarray = Import-Csv "userlist.csv"

$DefinedVariable = "Users"

foreach ($user in $userarray){

$login = $user.username
$gname = $user.firstname
$sname = $user.lastname
$fname = $gname + " " + $sname
$passw = ConvertTo-SecureString $user.password -AsPlainText -Force
$email = $user.email
$dptmt =  $DefinedVariable

$madou = "CN=$dptmt,DC=contoso,DC=com"

New-ADUser -SamAccountName $login -UserPrincipalName $email -Name $fname  -GivenName $gname `
-Surname $sname -EmailAddress $email -AccountPassword $passw -Enabled $true `
-Path $madou -HomeDrive "Z:" -HomeDirectory $hodir
}

答案 1 :(得分:0)

我认为它只是$ madou变量的语法: 据我所知,DistinguishedName属性不允许在其字符串中使用点(。)。所以我想,而不是:

$madou = "OU=$dptmt,OU=Staff,DC=breezeyob.v11a,DC=.org"

应该是:

$madou = "OU=$dptmt,OU=Staff,DC=breezeyob,DC=v11a,DC=org"