在PowerShell中添加多个用户,PowerShell无法正常工作

时间:2017-10-12 13:08:23

标签: powershell

我正在尝试将多个用户帐户从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

                    }    
        } 

2 个答案:

答案 0 :(得分:0)

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

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

另外,你应该在for循环内而不是在外面。在外面进行只会创建最后一个用户。

答案 1 :(得分:0)

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

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