मैं एक csv फ़ाइल के माध्यम से थोक में उपयोगकर्ताओं को जोड़ने के लिए एक PowerShell स्क्रिप्ट बनाने का प्रयास कर रहा हूँ। यदि उपयोगकर्ता नाम पहले से मौजूद है तो मैं उपयोगकर्ता नाम में नंबर 1 जोड़ना चाहता हूं। मैं यह कैसे कर सकता हूँ? मैंने सोचा कि मैं शायद एक अगर बना सकता हूँ?

foreach ($User in $ADUsers) {   

    # Selvlagde variabler for opprettelse av brukere
    $Password  = Get-RandomCharacters -length 20 -characters 'ABCDEFGHKLMNOPRSTUVWXYZabcdefghiklmnoprstuvwxyz1234567890!._?/-'
    $Username  = $User.GivenName.substring(0,3) + $User.SurName.substring(0,3)
    $Username  = $Username.Replace('æ','ae')
    $Username  = $Username.Replace('ø','o')
    $Username  = $Username.Replace('å','aa')
    $Username  = $Username.ToLower()
    $Username  = $Username.Trim()
    $Email       = $Username + '@ONPremiumIT.com'
    $DisplayName = $User.GivenName + ' ' + $User.SurName

    if (condition) {
        
    }


    # Bruker splatting for å lagre info om brukere
    $userParams = @{
        Path                  = $User.Path
        SamAccountName        = $Username
        UserPrincipalName     = $Email
        Name                  = "$($User.GivenName) $($User.SurName)"
        GivenName             = $User.GivenName
        Surname               = $User.SurName
        Enabled               = $true
        ChangePasswordAtLogon = $false
        DisplayName           = $Displayname
        Department            = $Department
        AccountPassword       = (ConvertTo-SecureString $Password -AsPlainText -Force)
    }
    
    New-ADUser @userParams

0
Maria.A 21 मार्च 2021, 18:37

1 उत्तर

सबसे बढ़िया उत्तर

आप यह परीक्षण करके कर सकते हैं कि उस SamAccountName वाला उपयोगकर्ता पहले से मौजूद है या नहीं। कुछ इस तरह:

foreach ($User in $ADUsers) {   

    # Selvlagde variabler for opprettelse av brukere
    $Password  = Get-RandomCharacters -length 20 -characters 'ABCDEFGHKLMNOPRSTUVWXYZabcdefghiklmnoprstuvwxyz1234567890!._?/-'
    $Username  = $User.GivenName.substring(0,3) + $User.SurName.substring(0,3)
    $Username  = $Username.Replace('æ','ae')
    $Username  = $Username.Replace('ø','o')
    $Username  = $Username.Replace('å','aa')
    $Username  = $Username.ToLower()
    $Username  = $Username.Trim()

    # test if a user with that SamAccountName already exists, add an index number if needed
    $n = 1                        # start index at 1
    $newName = $Username          # copy to a new variable
    while ($true) {               # start an endless loop
        $usr = Get-ADUser -Filter "SamAccountName -eq '$newName'" -ErrorAction SilentlyContinue
        if (!$usr) { 
            $Username = $newName  # assign the $Username variable the unique value
            break                 # exit the loop if the $username is unique in the domain
        }  
        # construct a new username by adding the index to it
        $newName = '{0}{1}' -f $Username, $n++
    }

    $Email       = $Username + '@ONPremiumIT.com'
    $DisplayName = $User.GivenName + ' ' + $User.SurName

    # Bruker splatting for å lagre info om brukere
    $userParams = @{
        Path                  = $User.Path
        SamAccountName        = $Username
        UserPrincipalName     = $Email
        Name                  = "$($User.GivenName) $($User.SurName)"
        GivenName             = $User.GivenName
        Surname               = $User.SurName
        Enabled               = $true
        ChangePasswordAtLogon = $false
        DisplayName           = $Displayname
        Department            = $Department
        AccountPassword       = (ConvertTo-SecureString $Password -AsPlainText -Force)
    }

    New-ADUser @userParams
}

पी.एस. उपयोगकर्ता नाम के लिए परीक्षण इससे पहले होना चाहिए कि वह $Username चर के साथ अधिक कार्य कर रहा हो, जैसे $Email चर के लिए इसका उपयोग करना। अन्यथा, आपके पास उसमें डुप्लीकेट भी हो सकते हैं..

1
Theo 21 मार्च 2021, 18:51
वाह बहुत - बहुत धन्यवाद!! मैंने अभी आपके कोड की कोशिश की, लेकिन मुझे यह कहते हुए एक त्रुटि संदेश मिला कि "निर्देशिका में किसी ऑब्जेक्ट को पहले से उपयोग में आने वाले नाम से जोड़ने का प्रयास किया गया था"। यह तब था जब मैंने सभी को फिर से प्राप्त करने के लिए, लेकिन उपयोगकर्ता नाम में नंबर 1 के साथ, उसी सीएसवी फ़ाइल के माध्यम से नए उपयोगकर्ताओं को जोड़ने का प्रयास किया
 – 
Maria.A
21 मार्च 2021, 19:48
जब मैं ऐसा करता हूं तो मैं दिए गए नाम, उपनाम और प्रदर्शन नाम में समान प्रमाण-पत्र वाले उपयोगकर्ताओं को जोड़ने का प्रयास करता हूं, लेकिन मैं उनके लिए एक नया उपयोगकर्ता नाम बना देता हूं। यह संभव है, है ना?
 – 
Maria.A
21 मार्च 2021, 19:57
@Maria.A हाँ, Name प्रॉपर्टी भी उसी डोमेन में अद्वितीय होनी चाहिए। आमतौर पर लोग ऐसे मामले में पहले अक्षर जोड़कर इसे खास बनाने की कोशिश करते हैं। ऐसी स्थितियों के लिए, जो सौभाग्य से बहुत बार नहीं होती हैं, हम भाग्यशाली हैं कि हमें इस तरह का एक अच्छा वर्णनात्मक त्रुटि संदेश मिला है, इसलिए हमें उस उपयोगकर्ता के लिए एक रचनात्मक, लेकिन स्वीकार्य नया नाम निकालने के लिए मजबूर होना पड़ता है;)
 – 
Theo
21 मार्च 2021, 23:08