【问题标题】:Import-CSV for Active Directory Object Already Exists ErrorActive Directory 对象的 Import-CSV 已存在错误
【发布时间】:2015-09-03 13:55:17
【问题描述】:

我创建了一个 PowerShell 脚本来从 CSV 文件导入新的 AD 用户。代码是:

Import-Module ActiveDirectory
$Users = Import-Csv -Delimiter "," -Path "C:\temp\kindergarten.csv"
$Password = 000
foreach ($User in $Users) {
    $Password = $Password + 1
    $OU = "OU=KCenter,OU=Students,OU=District Users New,DC=,DC=k12,DC=ny,DC=us"
    $UserFirstname = $User.FirstName
    $UserLastname = $User.LastName
    $DetailedName = $UserFirstname + " " + $UserLastname
    $FirstLetterFirstname = $UserFirstname.substring(0,1)
    $SAMName = $FirstLetterFirstname + $UserLastname
    $UserPrincipalName = $SAMName + "@student.pobschools.org"
    $Description = "Kindergarteners K-Center"


    New-ADUser -Name $DetailedName -SamAccountName $SAMName -UserPrincipalName $UserPrincipalName -DisplayName     
    $SAMName -GivenName $UserFirstname -Surname $UserLastname -AccountPassword (ConvertTo-SecureString $Password -AsPlainText -Force) 
    -Enabled $false -Description $Description -EmailAddress $UserPrincipalName -CannotChangePassword $true -ChangePasswordAtLogon $false -Path $OU
    }

该脚本适用于 CSV 中大约一半的条目。对于其他人,我得到了错误:

New-ADUser : The object already exists
At C:\users\jbaruch\desktop\getADUsers.ps1:16 char:12
+     New-ADUser <<<<  -Name $DetailedName -SamAccountName $SAMName -UserPrincipalName $UserPrincipalName -DisplayName
$SAMName -GivenName $UserFirstname -Surname $UserLastname -AccountPassword (ConvertTo-SecureString $Password -AsPlainTe
xt -Force) -Enabled $false -Description $Description -EmailAddress $UserPrincipalName -CannotChangePassword $true -Chan
gePasswordAtLogon $false -Path $OU
    + CategoryInfo          : NotSpecified: (CN=Shradha Sang...k12,DC=ny,DC=us:String) [New-ADUser], ADException
    + FullyQualifiedErrorId : The object already exists,Microsoft.ActiveDirectory.Management.Commands.NewADUser

如果我搜索用户,我会收到一个错误,因为没有结果。我不确定为什么它会像已经存在的那样回来。任何帮助将不胜感激,谢谢。

【问题讨论】:

  • 我以为我已经检查过了,但看起来失败的用户与另一个帐户具有相同的 SAM 名称。我想修改我的脚本以检查 SAM 名称是否存在,以及是否在 SAM 名称中的姓氏之前添加他们名字的第二个字母。我可以用一个简单的 if 语句来做到这一点吗?

标签: powershell csv active-directory


【解决方案1】:

阅读您的评论,我认为这可能会对您有所帮助:

$VerbosePreference = 'Continue'

$Users = Import-Csv -Delimiter "," -Path "C:\temp\kindergarten.csv"
$Password = 000
foreach ($User in $Users) {

    $Password = $Password + 1
    $SamAccountName = $User.FirstName[0] + $User.LastName

    if ($U = Get-ADUser -Filter {SamAccountName -eq $SamAccountName}) {
        Write-Verbose "SamAccountName $($SamAccountName) already present"

        if ($U.GivenName -eq $User.FirstName) {
            Write-Verbose "User firstname $($User.FirstName) already present in AD"
            Continue # to the next user
        }
        $SamAccountName = $User.FirstName[1] + $User.LastName
        Write-Verbose "New SamAccountName generated $($SamAccountName)"
    }

    $ADParams = @{
        Name                  = $UserFirstname + ' ' + $UserLastname
        SamAccountName        = $SamAccountName
        UserPrincipalName     = $SamAccountName + '@student.pobschools.org'
        DisplayName           = $SamAccountName
        GivenName             = $User.FirstName
        Surname               = $User.LastName
        AccountPassword       = (ConvertTo-SecureString $Password -AsPlainText -Force)
        Enabled               = $false
        Description           = 'Kindergarteners K-Center'
        EmailAddress          = $SamAccountName + '@student.pobschools.org'
        CannotChangePassword  = $true
        ChangePasswordAtLogon = $false
        Path                  = 'OU=KCenter,OU=Students,OU=District Users New,DC=,DC=k12,DC=ny,DC=us'
    }
    Write-Verbose "Create user $($SamAccountName)"
    New-ADUser @ADParams
}

Splatting 是一种很好的技术,可以使内容更具可读性。

【讨论】:

  • 非常感谢,看起来很棒。唯一的问题是,如果我运行相同的 csv 文件,那么之前添加的所有项目都会使用新的 SAM 帐户名再次添加。我想我需要检查它是否存在,然后检查名字是否相同。如果名字也相同,那么我不希望创建用户。我将尝试在另一个之后使用嵌套的 if 语句来做到这一点。还是应该在过滤器中使用 AND &&?
  • 我改进了代码以检查具有相同SamAccountName 的用户是否也具有相同的FirstName。我希望向您展示一些您将来可以使用的技术。使用 PowerShell 玩得越多,你就会越熟练 :) 如果没问题,别忘了将问题标记为已解决。
猜你喜欢
  • 1970-01-01
  • 2011-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多