Benutzer mit den meisten Antworten
Objekt mit Namen bereits vorhanden

Frage
-
Hallo liebe Powershell Community, ich stehe leider vor einem ärgerlichen Problem. Ich lege in unserem Unternehmen Nutzer per Powershell Script an. Dies funktioniert tadellos, AUßER: Der Name ist bereits vorhanden. Ich verstehe leider nicht so richtig, warum das für Powershell ein Problem ist, denn ich kann ja normal in unser AD gehen und mir dort 15 mal einen Max Mustermann anlegen. Per Script würde aber bereits beim zweiten Mustermann ein Fehler angezeigt werden wie unten auf dem Bild. Kann man diesen Fehler umgehen? Ich poste ganz unten das verwendete Script, falls es Jemanden interessiert.
cls # LÄD FUNKTION ZUM ÖFFNEN EINES INPUT-FENSTERS [void][Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic') $title = 'Neuer Nutzer' $msg = 'Bitte Anrede des neuen Nutzers eingeben:' # ÖFFNET DAS INPUT-FENSTER $anrede = [Microsoft.VisualBasic.Interaction]::InputBox($msg, $title) $title = 'Neuer Nutzer' $msg = 'Bitte Nachname des neuen Nutzers eingeben:' # ÖFFNET DAS INPUT-FENSTER $name = [Microsoft.VisualBasic.Interaction]::InputBox($msg, $title) $title = 'Neuer Nutzer' $msg = 'Bitte Vorname des neuen Nutzers eingeben:' # ÖFFNET DAS INPUT-FENSTER $vorname = [Microsoft.VisualBasic.Interaction]::InputBox($msg, $title) $title = 'Neuer Nutzer' $msg = 'Bitte Abteilung des neuen Nutzers eingeben:' # ÖFFNET DAS INPUT-FENSTER $abtei = [Microsoft.VisualBasic.Interaction]::InputBox($msg, $title) $title = 'Neuer Nutzer' $msg = 'Bitte Position eingeben:' # ÖFFNET DAS INPUT-FENSTER $position = [Microsoft.VisualBasic.Interaction]::InputBox($msg, $title) $title = 'Neuer Nutzer' $msg = 'Bitte Titel des neuen Nutzers eingeben:' # ÖFFNET DAS INPUT-FENSTER $usertitel = [Microsoft.VisualBasic.Interaction]::InputBox($msg, $title) $title = 'Neuer Nutzer' $msg = 'Art des Mitarbeiters angeben (Arzt, Pflege, Verwaltung, Sonstige):' # ÖFFNET DAS INPUT-FENSTER $art = [Microsoft.VisualBasic.Interaction]::InputBox($msg, $title) $title = 'Neuer Nutzer' $msg = 'Bitte Personalnummer eingeben:' # ÖFFNET DAS INPUT-FENSTER $persnr = [Microsoft.VisualBasic.Interaction]::InputBox($msg, $title) $title = 'Neuer Nutzer' $msg = 'Bitte Telefonnummer eingeben:' # ÖFFNET DAS INPUT-FENSTER $num = [Microsoft.VisualBasic.Interaction]::InputBox($msg, $title) $ReplaceMap = New-Object -TypeName System.Collections.Hashtable $ReplaceMap['Ä'] = 'Ae' $ReplaceMap['Ö'] = 'Oe' $ReplaceMap['Ü'] = 'Ue' $ReplaceMap['ä'] = 'ae' $ReplaceMap['ö'] = 'oe' $ReplaceMap['ü'] = 'ue' $ReplaceMap['ß'] = 'ss' $ReplaceMap['é'] = 'e' $ReplaceMap['è'] = 'e' $ReplaceMap['á'] = 'a' $ReplaceMap['à'] = 'a' $Correct = (Get-Culture).TextInfo $vorname1 = $vorname $vorname1 = $Correct.ToTitleCase($vorname1.ToLower()) $ReplaceMap.Keys | % {$vorname1 = $vorname1.Replace($_, $ReplaceMap[$_])} $name1 = $name $name1 = $Correct.ToTitleCase($name1.ToLower()) $ReplaceMap.Keys | % {$name1 = $name1.Replace($_, $ReplaceMap[$_])} $name2=$name1 $vorname2=$vorname1 for($i = 1; $i -le 5; $i++) { $account = "$name1.$($vorname1.Substring(0,$i))" $user = Get-ADUser -server xxx.xxx.de -Filter "samaccountname -eq '$account'" if($user -eq $null){ write-Host "User $account in Domain 1 NICHT gefunden" $user = Get-ADUser -server xxy.xxy.de -Filter "samaccountname -eq '$account'" if($user -eq $null){ write-Host "User $account in Domain 2 NICHT gefunden" break } else{ write-Host "User $account in Domain 2 gefunden" } } else{ write-Host "User $account in Domain 1 gefunden" } } $account $check = Get-ADUser -server xxy.xxy.de -Filter "samaccountname -eq '$account'" #Remove-ADUser $Account -Confirm:$false if($usertitel){ New-ADUser -Name "$name, $vorname" -Path 'OU=Benutzer,OU=xxx,DC=xxy,DC=xxy,DC=de' -GivenName $vorname -Surname $name -accountPassword (ConvertTo-SecureString -AsPlainText "xxx" -Force) -ChangePasswordAtLogon $true -Enabled $True -City "xxx" -Company 'abc' -Description $abtei -Country 'DE' -DisplayName "$name, $vorname" -SamAccountName $account -ScriptPath "xxx\logon_xxx_komplett.bat" -State "xxx" -StreetAddress "xcv" -OtherAttributes @{'extensionAttribute9'="xxx";'extensionAttribute4'=$account;'extensionAttribute11'=$usertitel;'extensionAttribute14'=$abtei;'extensionAttribute10'=$anrede} -PostalCode "xxx" -HomePage "http://xxx.de" -Department $abtei -PasswordNeverExpires $False -title $position -OfficePhone $num } else { New-ADUser -Name "$name, $vorname" -Path 'OU=Benutzer,OU=xxx,DC=xxy,DC=xxy,DC=de' -GivenName $vorname -Surname $name -accountPassword (ConvertTo-SecureString -AsPlainText "xxx" -Force) -ChangePasswordAtLogon $true -Enabled $True -City "xxx" -Company 'abc' -Description $abtei -Country 'DE' -DisplayName "$name, $vorname" -SamAccountName $account -ScriptPath "aue\logon_xxx_komplett.bat" -State "xxx" -StreetAddress "xxx" -OtherAttributes @{'extensionAttribute9'="xxx";'extensionAttribute4'=$account;'extensionAttribute14'=$abtei;'extensionAttribute10'=$anrede} -PostalCode "xxx" -HomePage "http://xxx.de/xxx" -Department $abtei -PasswordNeverExpires $False -title $position -OfficePhone $num } Start-Sleep -s 2 Get-ADUser $account -prop otherMobile Set-ADUser $account -Add @{otherMobile=$art} Get-ADUser $account -prop postOfficeBox Set-ADuser $account -Add @{postOfficeBox=$persnr} Get-ADUser $account -prop info Set-ADUser $account -Add @{info="Mailbox-Aktivierung"} $user = Get-ADUser -Filter {(sAMAccountname -eq $account)} #$group = Get-ADGroup "CN=xxx_Benutzer_xxx-xxx,OU=Gruppe,OU=xxx,DC=xxy,DC=xxy,DC=de" Add-ADGroupMember -identity "xxx_Benutzer_xxy" –Members $user Add-ADGroupMember -identity "Ordnerumleitung" –Members $user Set-ADUser $account -UserPrincipalName ("{0}@{1}" -f $account,"xxy.xxy.de") new-item -path "\\1.1.1.1\xxx$\$account" -ItemType Directory -force -ea stop new-item -path "\\1.2.1.1\xxb$\$account" -ItemType Directory -force -ea stop # ADMINISTRATOR WIRD IN ALLEN ORDNERN, UNTERORDNERN UND DATEIEN ZUM BESITZER $username=”xxx_Server_xxx” $domain=”xxy” $rootPath = Join-Path "\\1.2.1.1\e$\home\" -childpath $account $ID = new-object System.Security.Principal.NTAccount($domain, $username) $acl = get-acl $rootPath $acl.SetOwner($ID) set-acl -path $rootPath -aclObject $acl Get-ChildItem -Path $rootPath -recurse | set-acl -aclObject $acl # DEAKTIVIERT DIE VERERBUNG DURCH ÜBERGEORDNETE ORDNER $acl = Get-ACL $rootPath $acl.SetAccessRuleProtection($true, $true) Set-Acl -Path $rootPath -AclObject $acl # ENTFERNT DIE GRUPPE "xxx-BENUTZER" $DirectoryPath="\\1.2.1.1\xxx$\$account" $IdentityRef = "xxx\xxx-Benutzer" #User oder Group $ACL = Get-ACL $DirectoryPath $ACEs=(Get-Acl $DirectoryPath).Access | where {$_.IdentityReference -eq $IdentityRef} $ACEs | foreach{ try{ $null=$ACL.RemoveAccessRule($_) Set-ACL $DirectoryPath $ACL "ACE für $IdentityRef erfolgreich entfernt" } catch{ #keine ACE mehr vorhanden } } # GEWÄHRT NUTZER VOLLZUGRIFF AUF HOME $fullPath = „\\1.2.1.1\xxx$\{0}“ -f $account $User = Get-ADUser -Identity $account if($User -ne $Null) { $acl = Get-Acl $fullpath $FileSystemRights = [System.Security.AccessControl.FileSystemRights]“FullControl“ $AccessControlType = [System.Security.AccessControl.AccessControlType]::Allow $InheritanceFlags = [System.Security.AccessControl.InheritanceFlags]“ContainerInherit, ObjectInherit“ $PropagationFlags = [System.Security.AccessControl.PropagationFlags]“None“ $AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule ($User.SID, $FileSystemRights, $InheritanceFlags, $PropagationFlags, $AccessControlType) $acl.AddAccessRule($AccessRule) Set-Acl -Path $fullpath -AclObject $acl -ea Stop } # GEWÄHRT NUTZER VOLLZUGRIFF AUF SCANS $fullPath = „\\1.1.2.1\xxx$\{0}“ -f $account $User = Get-ADUser -Identity $account if($User -ne $Null) { $acl = Get-Acl $fullpath $FileSystemRights = [System.Security.AccessControl.FileSystemRights]“FullControl“ $AccessControlType = [System.Security.AccessControl.AccessControlType]::Allow $InheritanceFlags = [System.Security.AccessControl.InheritanceFlags]“ContainerInherit, ObjectInherit“ $PropagationFlags = [System.Security.AccessControl.PropagationFlags]“None“ $AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule ($User.SID, $FileSystemRights, $InheritanceFlags, $PropagationFlags, $AccessControlType) $acl.AddAccessRule($AccessRule) Set-Acl -Path $fullpath -AclObject $acl -ea Stop } $account pause
Antworten
-
Moin,
nein, Du kannst nicht in der gleichen OU zweimal den gleichen CN verwenden. Das würde zu den gleichen Distinguished Names führen, und "distinguished" wäre dann futsch.
Evgenij Smirnov
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Dienstag, 12. November 2019 11:41
- Als Antwort markiert Denniver ReiningMVP, Moderator Mittwoch, 13. November 2019 17:51
Alle Antworten
-
Moin,
nein, Du kannst nicht in der gleichen OU zweimal den gleichen CN verwenden. Das würde zu den gleichen Distinguished Names führen, und "distinguished" wäre dann futsch.
Evgenij Smirnov
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Dienstag, 12. November 2019 11:41
- Als Antwort markiert Denniver ReiningMVP, Moderator Mittwoch, 13. November 2019 17:51
-
Ergänzend zu Evgenji: Beschäftige Dich mal mit Splatting, das ergibt bei so "Monster-Parametern" wie New-ADUser deutlich lesbareren Code :-)
$Parms = @{ Name = "$Name, $Vorname" Path = 'OU=Benutzer,OU=xxx,DC=xxy,DC=xxy,DC=de' # und so weiter... } if($usertitel){ $Parms += @{ extensionAttribute11 = $usertitel } } New-ADUser @Parms
Greetings/Grüße, Martin - https://mvp.microsoft.com/en-us/PublicProfile/5000017 Mal ein gutes Buch über GPOs lesen? - http://www.amazon.de/Windows-Server-2012--8-Gruppenrichtlinien/dp/3866456956 Good or bad GPOs? My blog - http://evilgpo.blogspot.com And if IT bothers me? Coke bottle design refreshment - http://sdrv.ms/14t35cq
-
Hallo, das verstehe ich nicht ganz. Ich kann doch ohne Probleme 5 mal eine Müller, Marie anlegen die dann alle einen unterschiedlichen SAMAccountname bekommen.
...aber nicht in der gleichen OU und mit dem gleichen Common Name...Evgenij Smirnov