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