Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 检查是否存在批量复制的ADUSER_Powershell - Fatal编程技术网

Powershell 检查是否存在批量复制的ADUSER

Powershell 检查是否存在批量复制的ADUSER,powershell,Powershell,我正在尝试制作一个PowerShell脚本,通过csv文件批量添加用户。如果用户名已经存在,我想将数字1添加到用户名中。我该怎么做?我想我可以做个假设 foreach ($User in $ADUsers) { # Selvlagde variabler for opprettelse av brukere $Password = Get-RandomCharacters -length 20 -characters 'ABCDEFGHKLMNOPRSTUVWXYZab

我正在尝试制作一个PowerShell脚本,通过csv文件批量添加用户。如果用户名已经存在,我想将数字1添加到用户名中。我该怎么做?我想我可以做个假设

foreach ($User in $ADUsers) {   

    # Selvlagde variabler for opprettelse av brukere
    $Password  = Get-RandomCharacters -length 20 -characters 'ABCDEFGHKLMNOPRSTUVWXYZabcdefghiklmnoprstuvwxyz1234567890!._?/-'
    $Username  = $User.GivenName.substring(0,3) + $User.SurName.substring(0,3)
    $Username  = $Username.Replace('æ','ae')
    $Username  = $Username.Replace('ø','o')
    $Username  = $Username.Replace('å','aa')
    $Username  = $Username.ToLower()
    $Username  = $Username.Trim()
    $Email       = $Username + '@ONPremiumIT.com'
    $DisplayName = $User.GivenName + ' ' + $User.SurName

    if (condition) {
        
    }


    # Bruker splatting for å lagre info om brukere
    $userParams = @{
        Path                  = $User.Path
        SamAccountName        = $Username
        UserPrincipalName     = $Email
        Name                  = "$($User.GivenName) $($User.SurName)"
        GivenName             = $User.GivenName
        Surname               = $User.SurName
        Enabled               = $true
        ChangePasswordAtLogon = $false
        DisplayName           = $Displayname
        Department            = $Department
        AccountPassword       = (ConvertTo-SecureString $Password -AsPlainText -Force)
    }
    
    New-ADUser @userParams


您可以通过测试具有该SamAccountName的用户是否已经存在来实现这一点。大概是这样的:

foreach ($User in $ADUsers) {   

    # Selvlagde variabler for opprettelse av brukere
    $Password  = Get-RandomCharacters -length 20 -characters 'ABCDEFGHKLMNOPRSTUVWXYZabcdefghiklmnoprstuvwxyz1234567890!._?/-'
    $Username  = $User.GivenName.substring(0,3) + $User.SurName.substring(0,3)
    $Username  = $Username.Replace('æ','ae')
    $Username  = $Username.Replace('ø','o')
    $Username  = $Username.Replace('å','aa')
    $Username  = $Username.ToLower()
    $Username  = $Username.Trim()

    # test if a user with that SamAccountName already exists, add an index number if needed
    $n = 1                        # start index at 1
    $newName = $Username          # copy to a new variable
    while ($true) {               # start an endless loop
        $usr = Get-ADUser -Filter "SamAccountName -eq '$newName'" -ErrorAction SilentlyContinue
        if (!$usr) { 
            $Username = $newName  # assign the $Username variable the unique value
            break                 # exit the loop if the $username is unique in the domain
        }  
        # construct a new username by adding the index to it
        $newName = '{0}{1}' -f $Username, $n++
    }

    $Email       = $Username + '@ONPremiumIT.com'
    $DisplayName = $User.GivenName + ' ' + $User.SurName

    # Bruker splatting for å lagre info om brukere
    $userParams = @{
        Path                  = $User.Path
        SamAccountName        = $Username
        UserPrincipalName     = $Email
        Name                  = "$($User.GivenName) $($User.SurName)"
        GivenName             = $User.GivenName
        Surname               = $User.SurName
        Enabled               = $true
        ChangePasswordAtLogon = $false
        DisplayName           = $Displayname
        Department            = $Department
        AccountPassword       = (ConvertTo-SecureString $Password -AsPlainText -Force)
    }

    New-ADUser @userParams
}

另外,用户名的测试必须在使用$username变量进行更多操作之前进行,比如将其用于$Email变量。否则,你可能也会有重复的…

哇,非常感谢!!我刚刚尝试了你的代码,但我收到一条错误消息,说“试图向目录中添加一个名称已在使用的对象”。这是当我试图通过与之前相同的csv文件添加新用户时,为了再次获得所有人,但用户名中的数字为1。当我这样做时,我尝试添加具有givenname、姓氏和displayname中相同凭据的用户,但我为他们创建了一个新用户名。这是可能的,对吗?@Maria.A是的,
Name
属性在同一域中也应该是唯一的。通常,在这种情况下,人们试图通过添加首字母使其独特。对于这样的情况,幸运的是不会经常发生,我们幸运地得到了这样一条很好的描述性错误消息,因此我们不得不为该用户想出一个创造性的、但可接受的新名称;)