gfritz74
Goto Top

Doppelte User im AD, Konto ist bereits vorhanden

Liebe Alle,


ich arbeite an einem Skript welches später automatisiert neue AD User anlegen soll.
Das klappt auch alles sehr zufriedenstellend. Das einzige wo och hängenbleibe ist die Mehrfachanlage wenn
der Name des Benutzers in der Gesamtstruktur schon vorhanden ist. Einen weiteren kriege ich mit dem Skript hinzugefügt
mehr aber auch nicht.Beim 3ten kommt dann die Meldung das das Konto bereits vorhanden ist.
Hier der Skript Code. Ich poste den mal komplett, vielleicht hat einer von Euch ja auch Verbesserungsvorschläge.
Bestimmt denke ich face-smile

#######################
#Übergabe von Testsystem#
#######################
Param(
    $ON_Vorname = "User",  
$ON_Name = "Test",  
$ON_Location = "Düsseldorf",  
$ON_EmployeeID = "9999",  
$ON_Funktion = "Testuser",  
$ON_Dezernat = "Düsseldorf"  

    #[Parameter(Mandatory=$True)]
    #[string]$ON_Vorname,
    #[Parameter(Mandatory=$True)]
    #[string]$ON_Name,
    #[Parameter(Mandatory=$True)]
    #[string]$ON_Location,
    #[Parameter(Mandatory=$True)]
    #[string]$ON_EmployeeID,
    #[Parameter(Mandatory=$True)]
    #[string]$ON_Funktion,
    #[Parameter(Mandatory=$True)]
    #[string]$ON_Derzernat
    )


###########################
#Test-Conection LDAPServer#
###########################

$ldapServer1 = "DC01.contoso.com"  
$ldapServer2 = "DC02.contoso.com"  
$ldapServer3 = "DC03.contoso.com"  

Foreach ($Computer in $ldapserver1)
{

    if (Test-Connection -ComputerName $ldapserver1 -Count 1 -Quiet)
    {
    $Server = "DC01"  
    } 
    
        elseif (Test-Connection -ComputerName $ldapserver2 -Count 1 -Quiet)
        {  
        $Server = "DC02"  
        }
    
            elseif (Test-Connection -ComputerName $ldapserver3 -Count 1 -Quiet)
            {
            $Server = "DC03"  
            }
} 


##################
#benötigte Arrays#
##################

#Department_Array
$Department_Array = @("Düsseldorf")  

###################
#benötigte Switche#
###################

#Domain_Switch
$Domain = Switch($ON_Location) {
    'Berlin' {'@ber.contoso.com'}  
    'Chemnitz' {'@che.contoso.com'}  
    'Düsseldorf' {'@dus.contoso.com'}  
    'Frankfurt' {'@fra.contoso.com'}  
    'Hamburg' {'@ham.contoso.com'}  
    'Köln' {'@cgn.contoso.com'}  
    'München' {'@muc.contoso.com'}  
    'Stuttgart' {'@str.contoso.com}  
    }

#postalCode_Switch
$postalCode = Switch($ON_Location) {
    'Berlin' {'10719'}  
    'Chemnitz' {'09112'}  
    'Düsseldorf' {'40474'}  
    'Frankfurt' {'60313'}  
    'Hamburg' {'20354'}  
    'Köln' {'50672'}  
    'München' {'80538'}  
    'Stuttgart' {'70173'}  
    }

#State_Switch
$st = Switch($ON_Location) {
    'Berlin' {'Berlin'}  
    'Chemnitz' {'Sachsen'}  
    'Düsseldorf' {'Nordrhein-Westfalen'}  
    'Frankfurt' {'Hessen'}  
    'Hamburg' {'Hamburg'}  
    'Köln' {'Nordrhein-Westfalen'}  
    'München' {'Bayern'}  
    'Stuttgart' {'Baden-Württenberg'}  
    }

#streetAddress_Switch
$streetAddress = Switch($ON_Location) {
    'Berlin' {'32'}  
    'Chemnitz' {' 16'}  
    'Düsseldorf' {'4'}  
    'Frankfurt' {'5-7'}  
    'Hamburg' {'63'}  
    'Köln' {'13'}  
    'München' {' 48'}  
    'Stuttgart' {'45'}  
    'Zürich' {'69'}  
    }

#Stadt_Switch für Password
$ON_Location_Short = Switch($ON_Location) {
    'Berlin' {'BER'}  
    'Chemnitz' {'CHE'}  
    'Düsseldorf' {'DUS'}  
    'Frankfurt' {'FRA'}  
    'Hamburg' {'HAM'}  
    'Köln' {'CGN'}  
    'München' {'MUC'}  
    'Stuttgart' {'STR'}  
    }

#ADS-ROOT-DC Switch
$result_RA_Standort = switch ($ON_Location)
{
	"Düsseldorf" {"$Server";break}  
	"Frankfurt"  {"$Server";break}  
    "Hamburg"    {"$Server";break}  
    "Stuttgart"  {"$Server";break}  
    "Berlin"     {"$Server";break}  
    "Köln"       {"$Server";break}  
    "Chemnitz"   {"$Server";break}  
    "München"    {"$Server";break}  
}

#ADS-SUBDOMAIN-DC Switch
$result_SUB_Standort = switch ($ON_Location)
{
	"Düsseldorf" {"$Server";break}  
	"Frankfurt"  {"$Server";break}  
    "Hamburg"    {"$Server";break}  
    "Stuttgart"  {"$Server";break}  
    "Berlin"     {"$Server";break}  
    "Köln"       {"$Server";break}  
    "Chemnitz"   {"$Server";break}  
    "München"    {"$Server";break}  
}

#OU_ROOT Switch
$result_root_ou = switch ($ON_Location)
{
	"Düsseldorf" {"OU=Users,OU=IS,DC=contoso,DC=com";break}  
	"Frankfurt"  {"OU=Users,OU=IS,DC=contoso,DC=com";break}  

}
#OU_SUB Switch
$result_Sub_ou = switch ($ON_Location)
{
	"Düsseldorf" {"OU=User,OU=DUS,DC=dus,DC=contoso,DC=com";break}  
	"Frankfurt"  {"OU=User,OU=FRA,DC=fra,DC=contoso,DC=com";break}  

}


######################
#benötigte Funktionen#
######################

#Function Replace-Umlaut
Function Replace-Umlaut {

    param (
       [string]$Text 
    )
    $characterMap = @{}
    $characterMap.([Int][Char]'ä') = "ae"  
    $characterMap.([Int][Char]'ö') = "oe"  
    $characterMap.([Int][Char]'ü') = "ue"  
    $characterMap.([Int][Char]'ß') = "ss"  
    $characterMap.([Int][Char]'Ä') = "Ae"  
    $characterMap.([Int][Char]'Ü') = "Ue"  
    $characterMap.([Int][Char]'Ö') = "Oe"  
    $characterMap.([Int][Char]' ') = "."  
    $characterMap.([Int][Char]'á') = "_"  
    
    ForEach ($key in $characterMap.Keys) {
        $Text = $Text -creplace ([Char]$key),$characterMap[$key] 
    }
     $Text
}
#create User and Password Single
$count=0
$count++
$Jahr = (Get-Date).Year
$vorname = Replace-Umlaut $ON_Vorname
$nachname = Replace-Umlaut $ON_Name
$nastring1 = $("$Vorname").Substring("0","1").Tolower()  
$nastring2 =$NachName.ToLower()
$PWString = $("$Vorname").Substring("0","1").ToUpper()  
$PWString2 = $("$NachName").Substring("","1").ToUpper()  
$PWString3 = $Nachname.substring(1,1).Tolower()
$PWString4 = $ON_Location_Short.ToUpper()
$userPrincipalName1 = "$nastring1$nastring2"  
$Password = "$PWString4$Jahr$PWString$PWString2$PWString3"  
$user_password = $Password | ConvertTo-SecureString -AsPlainText -Force
$AD_Konto_Name = "$ON_Name, $ON_Vorname"  
$userPrincipalName = "$userPrincipalName1$Domain"  
$SamAccountName = "$PWString$nachname"  

#create User Double
$vorname1 = Replace-Umlaut $ON_Vorname
$nachname1 = Replace-Umlaut $ON_Name
$nastring1 = $("$Vorname1").Substring("0","1").Tolower()  
$nastring2 =$NachName1.ToLower()
$PWString1 = $("$Vorname1").Substring("0","1").ToUpper()  
$PWString2 = $("$NachName1").Substring("","1").ToUpper()  
$PWString3 = $Nachname1.substring(1,1).Tolower()
$PWString4 = $ON_Location_Short.ToUpper()
$userPrincipalName2 = "$nastring1$nastring2$count"  
$count=0
$count++
$AD_Konto_Name_Double = "$ON_Name, $ON_Vorname$count"  
$userPrincipalName_Double = "$userPrincipalName1$Count$Domain"  
$SamAccountName_Double = "$PWString1$nachname1$count"  


#######################
#Settings_User for All#
#######################
$Settings_User = @{

    GivenName = $ON_Vorname
    SN = $ON_Name
    Company = "Testfirma"   
    streetAddress = $streetAddress
    postalCode = $postalCode
    l = $ON_Location
    st = $st
    c = "DE"  
    co = "Deutschland"  
    countryCode = "276"  
    EmployeeID = $ON_EmployeeID
    title = $ON_Funktion
    Department = $ON_Dezernat 
}

##################################
#Settings_User_Single_DC_for Root#
##################################
$Root_Ad_User_Single = @{
    name = "$AD_Konto_Name"  
    Displayname = $AD_Konto_Name 
    userPrincipalName = "$userPrincipalName1@contoso.com"  
    SamAccountName = "$SamAccountName"  
    Path   = $result_root_ou
    Server = $result_RA_Standort
    OtherAttributes = $Settings_User
}

##################################
#Settings_User_Single_DC_for Sub#
##################################
$Sub_Ad_User_Single = @{
    name = "$AD_Konto_Name"  
    Displayname = $AD_Konto_Name 
    userPrincipalName = "$userPrincipalName"  
    SamAccountName = "$SamAccountName"  
    Path   = $result_Sub_ou
    Server = $result_Sub_Standort
    OtherAttributes = $Settings_User
}


##################################
#Settings_User_Double_DC_for Root#
##################################
$Root_Ad_User_Double = @{
    name = "$AD_Konto_Name_Double"  
    Displayname = "$ON_Name,  $ON_Vorname"   
    userPrincipalName = "$userPrincipalName2@contoso.com"  
    SamAccountName = "$SamAccountName_Double"  
    Path   = $result_root_ou
    Server = $result_RA_Standort
    OtherAttributes = $Settings_User
}

#################################
#Settings_User_Double_DC_for Sub#
#################################
$Sub_Ad_User_Double = @{
    name = "$AD_Konto_Name_Double"  
    Displayname = "$ON_Name,  $ON_Vorname"   
    userPrincipalName = "$userPrincipalName_Double"  
    SamAccountName = "$SamAccountName_Double"  
    Path   = $result_Sub_ou
    Server = $result_Sub_Standort
    OtherAttributes = $Settings_User
}

####################
#Funktionen AD_User#
####################

#function IT_UserAD
function IT_UserAD{
new-aduser  @Root_Ad_User_Single -ErrorAction Stop -AccountPassword $user_password -ChangePasswordAtLogon $true -Enabled $true
}
#function UserAD
function UserAD{
new-aduser  @Sub_Ad_User_Single -ErrorAction Stop -AccountPassword $user_password -ChangePasswordAtLogon $true -Enabled $true
}
#function Double_UserAD
function Double_IT_UserAD{
new-aduser  @Root_Ad_User_Double -ErrorAction Stop -AccountPassword $user_password -ChangePasswordAtLogon $true -Enabled $true
}
#function Double_IT_UserAD
function Double_UserAD{
new-aduser  @Sub_Ad_User_Double -ErrorAction Stop -AccountPassword $user_password -ChangePasswordAtLogon $true -Enabled $true
}
#function Add_User
function Add_User {
if ($ON_Dezernat -in $Department_Array)
{
    IT_UserAD
}
else 
{ 
    UserAD 
}}
#function Double_Add_User
function Double_Add_User {
if ($ON_Dezernat -in $Department_Array)
{

    Double_IT_UserAD |Out-Null
}
else 
{ 

    Double_UserAD |Out-Null
}}


#Get-User-Name
function Get-User {
    [CmdletBinding()]
param(
        [Parameter(Mandatory=$true, ParameterSetName="Name")]  
        [ValidateNotNullOrEmpty()]
        [string]$Name,
                # UPN we will be searching in the domains; this is mandatory.
        [Parameter(Mandatory=$true, ParameterSetName="UserPrincipalName")]  
        [ValidateNotNullOrEmpty()]
        [string]$UserPrincipalName
    )

    process {
        $Domain_Array = @($server)

switch ($PSCmdlet.ParameterSetName) {
            Name {
                $SearchCriteria = "Name"  
                $SearchSpace = $AD_Konto_Name
            }

            UserPrincipalName {
                $SearchCriteria = "UserPrincipalName"  
                $SearchSpace = $UserPrincipalName
            }

        }

        foreach ($DCdomain in $Domain_Array) {
            $SearchResult = Get-ADUser -Filter {$SearchCriteria -eq $SearchSpace} -Server $DCdomain
        
           
            if ($SearchResult) {
                $Output = Get-ADUser -Identity $SearchResult.SamAccountName -Server $DCdomain

            Double_Add_User
                
            }
        }

        
        if ($Output -eq $null) {
             #ping $DCdomain
             Add_User
        }
    }
}


Get-User -name $AD_Konto_Name

Ich hoffe mir kann jemand dabei helfen. Ich weiß das doppelte Namen echt selten sind, aber es soll trotzdem abgedeckt werden. Wichtig ist dabei das der User, wenn doppelt, fortlaufend angelegt wird. User,User2,User3,User4 etc.
Der erste soll keine Zahl erhalten, erst der 2te usw.

Ich hoffe sehr das mir damit jemand helfen kann.

Ganz Liebe Grüße
gfritz74

Content-ID: 2948605083

Url: https://administrator.de/contentid/2948605083

Ausgedruckt am: 25.11.2024 um 12:11 Uhr

Dani
Dani 31.05.2022 um 20:24:21 Uhr
Goto Top
Moin,
du kannst du einfach vorab mit dem cmdlet get-user prüfen, ob der Benutzer existiert. Wenn dem so ist, an den Namen die 2 anhängen. Anschließend nochmals prüfen. Am Besten in eine Schleife packen und fertig.


Gruß,
Dani
404okiedo
404okiedo 31.05.2022 um 20:26:19 Uhr
Goto Top
vielleicht eine anderen Script prüfen ob Users existiert oder nicht

hier ist eine Script von jemand

#Find Users exist in AD or Not?
#Biswajit Biswas
$users = get-content c:\users.txt
foreach ($user in $users) {
$User = Get-ADUser -Filter {(samaccountname -eq $user)}
If ($user -eq $Null) {"User does not exist in AD ($user)" }
Else {"User found in AD ($user)"}
}
gfritz74
gfritz74 01.06.2022 um 08:36:16 Uhr
Goto Top
Zitat von @Dani:

Moin,
du kannst du einfach vorab mit dem cmdlet get-user prüfen, ob der Benutzer existiert. Wenn dem so ist, an den Namen die 2 anhängen. Anschließend nochmals prüfen. Am Besten in eine Schleife packen und fertig.


Gruß,
Dani

Guten Morgen Dani,

die Prüfung habe ich ja schon drin. Das die angepasst werden muss ist klar.
Aber wie könnte denn die Schleife aussehen? Kannst Du mir da Hilfestellung geben?

Viele Grüße
Grischa
Dani
Dani 06.06.2022 um 14:11:00 Uhr
Goto Top
Moin,
Aber wie könnte denn die Schleife aussehen?
do-while Schleife.

Kannst Du mir da Hilfestellung geben?
Siehe oben.


Gruß,
Dani
gfritz74
Lösung gfritz74 07.06.2022 um 13:09:50 Uhr
Goto Top
@Dani Naja nicht besonders hilfreich. Aber egal.
Dani
Dani 07.06.2022 um 18:11:01 Uhr
Goto Top
Moin,
ein bisschen Eigeninitiative erwarte ich schon. Wir sind hier in einem Forum - Geben und Nehmen.

Wenn du dich mit meinen Hinweis auseinandersetzt und ein bisschen Logik einbringst, bringt dich weiter. Wenn du auf einen Fehler läufst, darfst du gerne deinen PowerShell Code gerne posten und wir schauen zusammen drüber.


Gruß,
Dani