【问题标题】:Adding multiple users in AD with powershell not working使用powershell在AD中添加多个用户不起作用
【发布时间】:2017-10-12 23:00:24
【问题描述】:

我正在尝试将多个用户帐户从 csv 文件导入到 powershell 脚本中。脚本正在运行,但我在 AD 中创建的 OU 下没有看到任何添加的用户。运行脚本时确实收到一条错误消息:“无法识别搜索过滤器”。这里有什么错误?

更新:脚本在评论提示后更新。

Import-Module activeDirectory
$csvpath = $PSScriptRoot + "\produksjonsbrukereImport.csv"

if (Test-Path $csvpath) {

    $csvpath = "C:\script\produksjonsbrukereImport.csv"
    $csv = Import-Csv -Delimiter "," -Path $csvpath -Encoding UTF7
    $OUBasePath =  ",OU=Produksjon,OU=OpMeis,DC=OpMeis,DC=local"
    $logpath = "$PSScriptRoot\import-brukere-loggfil.txt"

    }


    foreach ($line in $csv) {

        #Lagrer variabler
        $fornavn = $line.fornavn
        $etternavn = $line.etternavn
        #$navn = ($fornavn + " " + $etternavn)
        $beskrivelse = $line.beskrivelse

        $passord = $line.Passord
        $avdeling = $line.avdeling
        #$brukernavn = ($fornavn.Substring(0,3) + $etternavn.Substring(0,3)).tolower()


        $brukernavn = $brukernavn -replace "æ", "a"
        $brukernavn = $brukernavn -replace "å", "a"
        $brukernavn = $brukernavn -replace "ø", "o"

        $principal = $brukernavn + "@OpMeis.local"
        $profPath = ($profBasePath + $brukernavn)
        $profPathTrue = $profPath + ".V2"

        #Genererer OU-path basert på avdelingsnavn
        $OU = ("OU=" + $avdeling + $OUBasePath)


   }

        if (!(get-aduser -Filter {sAMAccountName -eq $brukernavn})) {

            $logg = "Forsøker å legge til bruker for $navn - brukernavn: $brukernavn, passord: $passord, avdeling: $avdeling"

            #Skriver til skjerm og lagrer i loggfil
            Write-Host $logg



            try {

                New-ADUser -Name $navn -GivenName $fornavn `
                -Surname $etternavn –DisplayName $navn `
                -sAMAccountName $brukernavn `
                -Description $beskrivelse -Path $OU `
                -AccountPassword (ConvertTo-SecureString $passord -AsPlainText -Force) -Enabled $true `
                -ChangePasswordAtLogon $true `
                -UserPrincipalName $principal `
               # -ProfilePath $profPath `
                -Passthru | Out-file -FilePath $logpath -Append


                Start-Sleep -Milliseconds 500


                ADD-ADGroupMember (“G_” + $line.avdeling) –members $brukernavn

                Start-Sleep -Milliseconds 100


                $logg | Out-File -FilePath $logpath -Append
                Write-Host "Bruker: $brukernavn lagt til i AD"

                $logg | Out-File -FilePath $logpath -Append
                Write-Host "Bruker: $brukernavn lagt til i AD"

            } #END TRY

            #Ved feil, skriv til loggfil
            catch {

                    $ErrorMessage = $_.Exception.Message | Out-File -FilePath $logpath -Append
                    $FailedItem = $_.Exception.ItemName | Out-File -FilePath $logpath -Append

                    }    
        } 

【问题讨论】:

标签: powershell


【解决方案1】:

您不应该在Get-Aduser 行上使用-eq。你可以简单地使用

if (!(Get-ADuser -identity $brukernavn)) {
    # Create User command block
}

此外,您应该在 for 循环内部而不是外部执行此操作。在外面做只会创建最后一个用户。

【讨论】:

    【解决方案2】:

    对于您当前的代码,您在第 41 行 (Get-ADUser) 使用的变量 $brukernavn 是一个空字符串。预先用数据填充它,就像第 24 行注释掉的那样。

    我看到的另一个“错误”是 New-ADUser 部分。反引号不是续行字符,而是转义字符,下一个使用的字符被转义。在您的使用中,这将换行,因为您已将第 59 行注释掉,您的 New-ADUser 命令将在此时结束。下一行将引发 CommandNotFoundException。我个人不是缩短行的反引号的好朋友,更好的方法是使用splatting。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-09
      • 2020-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多