none
Objekt mit Namen bereits vorhanden RRS feed

  • 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

    Mittwoch, 6. November 2019 06:37

Antworten

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

    http://evgenij.smirnov.de

    Mittwoch, 6. November 2019 06:41
  • 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

    Mittwoch, 6. November 2019 10:47
  • 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. 
    Freitag, 8. November 2019 06:59
  • 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

    http://evgenij.smirnov.de

    Freitag, 8. November 2019 07:30