Nous automatisons la maintenance d'un grand nombre d'utilisateurs dans AD

Nous automatisons la maintenance d'un grand nombre d'utilisateurs dans AD:



Bonjour! Dans cet article, je voudrais décrire une solution pratique que j'ai appliquée pour automatiser une tâche de routine de la deuxième ligne de support technique d'une grande entreprise.



Nous avons deux domaines AD répartis géographiquement pour 10 000 personnes, une solution appliquée pour organiser l'accès Web à des postes de travail distants via des applications RemoteApp avec plusieurs systèmes d'information intégrés et une base de données en croissance active, jusqu'à 500 personnes par mois. Pour ~ 24 par jour ouvrable, pour ~ 3 personnes par heure.



La première conclusion évidente des données d'entrée est qu'un administrateur ne peut pas faire face à un tel nombre d'utilisateurs, il devrait avoir le droit de tomber malade / de partir en vacances sans paralyser l'entreprise. Et la pratique montre que même deux ne s'en sortent pas.



Le deuxième problème est l'identification personnelle, par exemple, sur les ressources de fichiers de l'entreprise, comme c'est souvent le cas, il y a des informations qui ne sont pas destinées aux regards indiscrets, et en conséquence, il est nécessaire de vérifier chaque personne demandant l'accès à ajouter. à Active Directory et en accordant certains groupes d'accès. Malheureusement, il n’a pas été possible de se passer de bureaucratie pour résoudre ce problème. La procédure se résume à la soumission d'une demande papier sous la forme la plus standardisée, signée (de préférence électronique) par le chef du demandeur et à l'approbation de ce document par des personnes familières avec le signataire personnellement.



Après l'approbation de l'application standardisée, il reste peu à faire, ajouter des personnes à AD, attribuer les groupes d'accès nécessaires, et ajouter une plaque pour exceller. Le dernier point peut paraître un peu archaïque, car AD lui-même supporte assez l'audit des changements, mais ma pratique montre que ce point n'est pas superflu dans un tel virage, et simplifie même le processus de recherche d'un râteau dans le cas du débriefing, ce qui se produit souvent, à la suite de la première conclusion ...



Mais le processus peut être légèrement automatisé en utilisant quelques scripts simples. La logique se résume au processus inverse:



  1. Approuver la norme comptable AD dans l'entreprise
  2. Nous demandons à l'utilisateur des données dans un format uniforme.



    image
  3. Nous saisissons des données de base dans le tableau, par exemple:
  4. Nous exportons d'Excel vers un fichier CSV, une page générée automatiquement adaptée à une entrée automatique dans AD à l'aide de scripts
  5. Nous exportons et voilà! Il reste à transférer le nom d'utilisateur et le mot de passe à l'utilisateur.


Peut-être que les méthodes décrites par moi ne peuvent pas être qualifiées de bonnes pratiques, mais elles permettent en pratique de résoudre le problème existant sans écrire un système d'information séparé et créer un grand nombre d'intégrations.



Ensuite, je décrirai quelques points techniques et publierai les scripts que j'utilise:

Voici à quoi ressemble un tableau adapté à l'importation dans AD:



image



Pour moi, ce tableau est généré automatiquement à partir du précédent, je joins un exemple .



Il est nécessaire de sauvegarder le tableau adapté à l'importation au format CSV (délimité par des virgules)



image



Selon vous, quels seront les délimiteurs si vous ouvrez le fichier généré avec le bloc-notes? Tort. Tel - ";"



Séparément, dans ma mise en œuvre, je devrais m'attarder sur la colonne de translittération. Dans la norme approuvée par nos soins, certains des champs sont remplis de translittération selon l'exemple approuvé, et pour ne pas le faire à chaque fois que j'utilise un script vba, le voici:



Function TranslitText(RusText As String) As String
    Dim RusAlphabet As Variant '    
    RusAlphabet = Array("-", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "")
 
    Dim EngAlphabet As Variant '    
    EngAlphabet = Array("-", "a", "b", "v", "g", "d", "e", "yo", "zh", "z", "i", "y", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "kh", "ts", "ch", "sh", "sch", "", "y", "", "e", "yu", "ya", "A", "B", "V", "G", "D", "E", "Yo", "Zh", "Z", "I", "Y", "K", "L", "M", "N", "O", "P", "R", "S", "T", "U", "F", "Kh", "Ts", "Ch", "Sh", "Sch", "", "Y", "", "E", "Yu", "Ya")
     
    Dim EngText As String, Letter As String, Flag As Boolean
             
    For i = 1 To Len(RusText) '     
        Letter = Mid(RusText, i, 1)
        Flag = 0
        For j = 0 To 67 '     
            If RusAlphabet(j) = Letter Then '         ...
                Flag = 1
                If RusAlphabet(j) = Letter Then '   (  )
                    EngText = EngText & EngAlphabet(j) '...       
                    Exit For
                Else
                    EngText = EngText & UCase(EngAlphabet(j))
                    Exit For
                End If
            End If
        Next j
        If Flag = 0 Then EngText = EngText & Letter '       (,    ..),     
    Next i
    TranslitText = EngText
End Function
      
      





Ne faites pas comme moi, veuillez utiliser l'une des normes de translittération existantes à partir du lien .



Le script suivant placé dans un fichier avec l'extension .ps1 vous permettra en quelques clics de déposer tous les comptes du fichier généré à l'étape précédente dans AD, quel qu'en soit le nombre. Et en même temps pour accrocher le groupe de groupe d'annonces sur tous les UZ créés.



Import-Module activedirectory 
Import-Csv "C:\generated.csv" -Encoding default -Delimiter ';'| ForEach-Object {
New-ADUser -Server DOMEN.RU -Name $_.FirstName `
-DisplayName $_.DisplayName `
-GivenName $_.GivenName `
-Surname $_.LastName `
-Initials $_.Initials `
-OfficePhone $_.Phone `
-Description $_.Description `
-UserPrincipalName $_.UserPrincipalName `
-SamAccountName $_.samAccountName `
-Email $_.mail `
-Path "OU=TEST_OU,OU=Guest,OU=Users,OU=DOMEN,DC=DOMEN,DC=RU" `
-AccountPassword (ConvertTo-SecureString $_.Password -AsPlainText -force) -Enabled $true 
Set-ADuser $_.samAccountName -ChangePasswordAtLogon $True 
Add-AdGroupMember -Identity ad-group  -Members $_.samAccountName
} 
      
      






All Articles