Automatizamos a manutenção de um grande número de usuários no AD

Automatizamos a manutenção de um grande número de usuários no AD:



Boa tarde! Neste artigo, gostaria de descrever uma solução prática que apliquei para automatizar uma tarefa de rotina da segunda linha de suporte técnico de uma grande empresa.



Temos dois domínios AD geograficamente distribuídos para 10.000 pessoas, uma solução aplicada para organizar o acesso à Web a desktops remotos por meio de aplicativos RemoteApp com vários sistemas de informação integrados e um banco de dados em crescimento ativo, até 500 pessoas por mês. Para ~ 24 por dia útil, para ~ 3 pessoas por hora.



A primeira conclusão óbvia dos dados de entrada é que um administrador não pode lidar com tal número de usuários, ele deve ter o direito de ficar doente / sair de férias sem paralisar a empresa. E a prática mostra que mesmo dois não conseguem lidar com isso.



O segundo problema é a identificação pessoal, por exemplo, nos recursos de arquivo do empreendimento, como costuma ser o caso, há informações que não se destinam a olhares indiscretos e, para isso, é necessário verificar cada pessoa que solicita acesso a ser adicionado ao Active Directory e conceder determinados grupos de acesso. Infelizmente, não foi possível prescindir da burocracia para resolver esse problema. O procedimento resume-se à apresentação de uma candidatura em papel na forma mais padronizada, assinada (de preferência eletrónica) pelo responsável da candidatura e a aprovação deste documento por pessoas familiarizadas com o signatário pessoalmente.



Após a aprovação do aplicativo padronizado, resta fazer pouco, adicionar pessoas ao AD, atribuir os grupos de acesso necessários e adicionar uma placa ao excel. O último ponto pode parecer um pouco arcaico, porque o próprio AD apóia bastante a auditoria de mudanças, mas minha prática mostra que este ponto não é supérfluo em tal turno, e até simplifica o processo de encontrar um rake no caso de debriefing, que freqüentemente ocorre, seguindo a partir da primeira conclusão ...



Mas o processo pode ser ligeiramente automatizado usando alguns scripts simples. A lógica se resume ao processo reverso:



  1. Aprovar o padrão de contabilidade AD na empresa
  2. Solicitamos ao usuário dados em um formato uniforme.



    imagem
  3. Inserimos dados básicos na tabela, por exemplo:
  4. Exportamos do Excel para um arquivo CSV, uma página gerada automaticamente adequada para entrada automática no AD usando scripts
  5. Exportamos e pronto! Resta transferir o nome de usuário e a senha para o usuário.


Talvez os métodos descritos por mim não possam ser chamados de melhores práticas, mas eles permitem, na prática, resolver o problema existente sem escrever um sistema de informação separado e criar um grande número de integrações.



A seguir, descreverei alguns pontos técnicos e publicarei os scripts que utilizo:

Esta é a aparência de uma tabela adequada para importação no AD:



imagem



Para mim, esta tabela é gerada automaticamente a partir da anterior, anexo um exemplo .



É necessário salvar a tabela adequada para importação no formato CSV (delimitado por vírgulas).



imagem



O que você acha que serão os delimitadores se abrir o arquivo gerado com o bloco de notas? Errado. Tal - ";"



Separadamente, em minha implementação, devo me deter na coluna de transliteração. No padrão por nós aprovado, alguns dos campos são preenchidos com transliteração de acordo com a amostra aprovada, e para não fazer isso todas as vezes que usei um script vba, aqui está:



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
      
      





Não faça como eu, use um dos padrões de transliteração existentes no link .



O próximo script colocado em um arquivo com a extensão .ps1 permitirá que você, com alguns cliques, elimine todas as contas do arquivo gerado na etapa anterior para o AD, não importa quantos sejam. E, ao mesmo tempo, para pendurar o grupo de anúncios em todos os UZ criados.



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