Puncte:0

Cum să: Dacă un utilizator iese deja, creați utilizatorul cu un „1” după numele său - PowerShell Active Directory

drapel ug

Am un script scris aici care verifică dacă există deja un AD. Dacă există, atunci scenariul mă anunță. Dacă nu, atunci le creează:

    if (Get-ADUser -F { SamAccountName -eq $username }) {
        
        # Dacă utilizatorul există, dați un avertisment
        Avertisment de scriere „Un cont de utilizator cu numele de utilizator $username există deja în Active Directory.”
    else {

## Apoi continuă aici cu crearea utilizatorului

Ceea ce aș dori să fac este, dacă există, să creez utilizatorul cu aceeași convenție de denumire, dar să pun un „1” după numele lor. Știu că sună aiurea... dar am fost întrebat dacă este posibil.

Și dacă nu există, ei bine, continuă ca de obicei și creează-le :)

Orice ajutor ar fi apreciat doamnelor și domnilor.

Mulțumesc :)

drapel br
[1] faceți apel împotriva AD dvs. pentru a vedea dacă există vreunul cu acel nume de utilizator de bază. de exemplu - `-like 'SmithJ*'`. [2] forțează rezultatul să fie o matrice prin împachetarea apelului în `@()`. [3] dacă `$Result.Count` nu este zero, luați sufixele cifrelor, sortați pentru a găsi cel mai mare, creșteți cu 1 și, în final, utilizați acel număr pentru a vă crea noul nume de utilizator.
Puncte:0
drapel in

Nu am atins cu adevărat părțile comentate, dar sperăm că acest lucru vă va da o idee. Nu am avut un server AD la îndemână pentru a-l testa pentru a fi conștient că nu pot garanta că este 100%

validare funcție($Utilizator){
    if (Get-ADUser -F { SamAccountName -eq $User.username }) {
        $număr utilizator = 1
        while (Get-ADUser -F { SamAccountName -eq ($User.username + $usernumber)}){
            $usernumber++
        }
        $NewUserName = $User.username + $usernumber
        Add_User($NewUserName, $User)
        }
        else {
            $NewUserName = $User.nume utilizator
        Add_User($NewUserName, $User)
        }
}

funcția Add_User($Nume utilizator, $Utilizator){
New-ADUser `
            -SamAccountName $Nume utilizator `
            -UserPrincipalName „$Username” + „@MEtest.com” `
            -Nume „$Firstname $Lastname” `
            -GivenName $User.Firstname `
            -Nume $Utilizator.Nume `
            -Activat $True `
            -DisplayName „$User.Lastname, $User.Firstname” `
            -Calea $User.ou `
            -OfficePhone $Utilizator.telefon `
            -Title $User.jobtitle `
            -AccountPassword (convertto-securestring $Password -AsPlainText -Force) -PasswordNeverExpires:$false -ChangePasswordAtLogon:$True
}

$ADUsers = Import-Csv C:\ps\usercreation.csv

$UPN = "METest.local"

foreach ($User în $ADUsers) {
    validare ($User)

        #Dacă acest utilizator există
        Write-Host "Contul de utilizator $username este creat." -Culoare din prim plan Cyan
        
        #Timp de somn pentru sincronizare pentru Exchange push
        #write-host Întreruperea pentru sincronizarea Exchange....
        #start-sleep -Secunde 300
    
    #Aplicați licențe utilizatorilor creați în AD apoi sincronizați cu Exchange
        #Set-MsolUserLicense -UserPrincipalName $newuser.UserPrincipalName -AddLicenses UI-OF-LICENSE-HERE   
        #Set-MsolUserLicense -UserPrincipalName $newuser.UserPrincipalName -AddLicenses UI-OF-LICENSE-HERE
        
    }
}

Read-Host - Prompt „Apăsați Enter pentru a ieși”
drapel ug
Mulțumiri! :). Din păcate, am primit asta :( --> New-ADUser : Nu se poate converti „System.Object[]” în tipul „System.String” cerut de parametrul „SamAccountName”. Metoda specificată nu este sprijinit. La linia:18 char:29 + -SamAccountName $Nume utilizator ` + ~~~~~~~~~ + CategoryInfo: InvalidArgument: (:) [New-ADUser], ParameterBindingException + FullyQualifiedErrorId: CannotConvertArgument, Microsoft.ActiveDirectory.Management.Commands.NewADUser
Aalom avatar
drapel in
Dacă tocmai l-ați rulat și sunteți pe ISE, atunci în promptul co.mand din partea de jos tastați $Username și vedeți ce returnează
drapel ug
Acesta returnează: PS C:\Windows\system32> $nume utilizator domnule Wong. Și acesta este unul dintre numele de utilizator de testare din fișierul meu .csv
Aalom avatar
drapel in
Probabil că puteți adăuga un out-string la acesta pentru a converti din obiect în șir. Deci -SamAccountName $Username ` ar deveni -SamAccountName $Username | out-string `
drapel ug
Aceasta este eroarea pe care o primesc acum după ce o înlocuiesc -> https://i.stack.imgur.com/SXHyS.png
Aalom avatar
drapel in
Are probleme cu găsirea proprietății nume de utilizator a obiectului csv, există o coloană nume de utilizator? Care este numele antetului?
drapel ug
Bună @Aalom. Antetele sunt " Prenume | Nume | Nume de utilizator | Parolă | Titlu job | OU | PhoneNumber
Aalom avatar
drapel in
Asigurați-vă că toate proprietățile obiectului corespunzătoare sunt scrise cu majuscule și minuscule. Deci $User.username ar trebui să fie $User.UserName etc.
drapel ug
M-am asigurat că totul se potrivește.Tocmai am făcut foaia Excel cu litere mici pentru a simplifica testarea în acest moment. Din anumite motive, încă primesc asta https://i.stack.imgur.com/ZhPrc.png
Aalom avatar
drapel in
Asigurați-vă că pe linia 2 este $User.username dacă numele variabilei obiect este $User și antetul este acum username.
drapel ug
Bună Aalom. Vă mulțumesc din nou foarte mult pentru ajutorul vostru continuu. Nu ai idee cât de mult apreciez ajutorul. Am încercat ce ai spus tu, tot aceeași eroare :(. Voi atașa o captură de ecran a codului, .csv și eroarea toate într-unul, așa că poate că va avea mai mult sens pentru ochiul antrenat https://i.stack.imgur.com/xD43D.png
Aalom avatar
drapel in
Așteptați creează conturile? Dacă da, ce se întâmplă când rulați din nou scriptul fără a șterge conturile de testare? Dispare eroarea și adaugă un 1 la numele de utilizator?
Aalom avatar
drapel in
Dacă acesta este cazul, atunci se întoarce eroarea, deoarece contul nu există în AD. Dar în cele din urmă încă oferă un fals pentru comparator și merge mai departe. Pentru a elimina avertismentele, utilizați un -erroraction ignore după } din instrucțiunea get-aduser.
Puncte:0
drapel ug

## scenariul complet##

$ADUsers = Import-Csv C:\ps\usercreation.csv

$UPN = "METest.local"

foreach ($User în $ADUsers) {

    #Atribuiți datele din csv unei variabile
    $username = $User.username
    $parolă = $Utilizator.parolă
    $firstname = $User.firstname
    $lastname = $User.lastname
    $OU = $User.ou #Acest câmp se referă la OU în care urmează să fie creat contul de utilizator
    $telefon = $Utilizator.telefon
    $jobtitle = $User.jobtitle

    #Verificați și vedeți dacă utilizatorul există deja în AD
    if (Get-ADUser -F { SamAccountName -eq $username }) {
        
        #Avertizați dacă utilizatorii există deja
        Avertisment de scriere „Un cont de utilizator cu numele de utilizator $username există deja în Active Directory.”
    }
    else {

        #Utilizatorul nu există, apoi procedați la crearea noului cont de utilizator
        New-ADUser `
            -SamAccountName $Nume utilizator `
            -UserPrincipalName „[email protected]” `
            -Nume „$Firstname $Lastname” `
            -GivenName $Firstname `
            -Nume $Nume `
            -Activat $True `
            -DisplayName „$Lastname, $Firstname” `
            -Calea $OU `
            -OfficePhone $telefon `
            -Titlu $jobtitle `
            -AccountPassword (convertto-securestring $Password -AsPlainText -Force) -PasswordNeverExpires:$false -ChangePasswordAtLogon:$True

        #Dacă acest utilizator există
        Write-Host "Contul de utilizator $username este creat." -Culoare din prim plan Cyan
        
        #Timp de somn pentru sincronizare pentru Exchange push
        #write-host Întreruperea pentru sincronizarea Exchange....
        #start-sleep -Secunde 300
    
    #Aplicați licențe utilizatorilor creați în AD apoi sincronizați cu Exchange
        #Set-MsolUserLicense -UserPrincipalName $newuser.UserPrincipalName -AddLicenses UI-OF-LICENSE-HERE   
        #Set-MsolUserLicense -UserPrincipalName $newuser.UserPrincipalName -AddLicenses UI-OF-LICENSE-HERE
        
    }
}

Read-Host - Prompt „Apăsați Enter pentru a ieși”

P.s. nu vă deranjați cu toate comentariile... sunt acolo, așa că nu rulează anumite lucruri în timp ce testez

Puncte:0
drapel in

În declarația dvs. if cu avertismentul, adăugați

$nume utilizator = $nume utilizator + „1”

Și apoi repetă codul în secțiunea ta.

Îl puteți curăța oricând și plasați codul de creare a contului într-o funcție și îl puteți apela în fiecare parte a declarației if.

drapel ug
Bună Aalom, mulțumesc pentru răspuns. Când am introdus „$username = $username + „1” ” în instrucțiunea IF, nu pare să facă mare lucru. Se execută prin script-ul așa cum ar trebui, apoi la sfârșit afirmă AVERTISMENT: Un utilizator cu nume de utilizator test.test1 există deja în director. Și când caut AD, nu este nimeni acolo cu acest nume. Ceea ce trebuie să fac este să creez un cont duplicat complet pentru cel care există, dar să fie doar „test.test1” în loc de „test.test” Apreciez ajutorul
Aalom avatar
drapel in
Te-ai asigurat că codul execută add-aduser după ce ai schimbat variabila $username? Presupun că alergi într-un fel de buclă aici, dacă da, cum arată?
drapel ug
Bună din nou, Îmi voi lipi scriptul într-un răspuns la script, astfel încât să fie mai ușor de citit
Puncte:0
drapel in

Deci, în primul rând, nu trebuie să vă atribuiți valorile din CSV variabilelor, acestea sunt deja încărcate în obiect și se află în memorie, așa că puteți comuta $username la $user.username repetați-l pentru secțiunea de adăugare a utilizatorului, doar schimbați numele după perioada pentru setul de date. Cred că văd ce s-a întâmplat, așa că dacă aveți john doe în sistem și alți 2 john doe pe lista dvs., prima dată a creat un john.doe1 și a avut succes, dar a doua oară a eșuat. Deci, trebuie să trageți șirul numelui de utilizator, să îl tăiați la ultimul caracter, să faceți o comparație pentru a vedea dacă ultimul caracter este un caracter sau un număr. Dacă o literă, atunci concatenează un 1 dacă un număr adaugă 1 la ea și concatenează acel număr în schimb. Are sens? Pe telefonul meu, așa că este o durere să scriu codul și să cercetez sintaxa.

drapel ug
Multumesc pentru raspuns. Voi fi sincer sincer și voi spune nu, asta nu are prea mult sens pentru mine :(. Doar ceva cu care nu am fost niciodată nevoit să mă încurci, așa că să aibă suficient sens să-l scriu și să funcționeze este locul în care eu a lovit un perete
Aalom avatar
drapel in
Voi sări pe laptop în câteva și voi încerca să pun ceva împreună, a trebuit să pun împreună un script AD înainte, din păcate, nu am acces la codul sursă pe care l-am scris.
drapel ug
Multumesc mult!! P.s. Simțiți-vă liber să copiați și să lipiți scriptul meu și să adăugați ceea ce aveți nevoie. Nu sunt deloc agitat.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.