【问题标题】:Powershell new-ADUser IssuePowershell new-ADUser 问题
【发布时间】:2016-03-10 20:01:31
【问题描述】:
$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,请告诉我!

【问题讨论】:

    标签: server windows-server-2012 powershell-4.0


    【解决方案1】:

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

    $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
    }
    

    【讨论】:

      【解决方案2】:

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

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

      应该是:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多