Automatizamos el mantenimiento de una gran cantidad de usuarios en AD

Automatizamos el mantenimiento de una gran cantidad de usuarios en AD: ¡



Buenas tardes! En este artículo, me gustaría describir una solución práctica que he aplicado para automatizar una tarea rutinaria de la segunda línea de soporte técnico de una gran empresa.



Contamos con dos dominios AD distribuidos geográficamente para 10,000 personas, una solución aplicada para organizar el acceso web a escritorios remotos a través de aplicaciones RemoteApp con varios sistemas de información integrados y una base de datos en crecimiento activo, hasta 500 personas por mes. Por ~ 24 por día laborable, por ~ 3 personas por hora.



La primera conclusión obvia de los datos de entrada es que un administrador no puede hacer frente a tal cantidad de usuarios, debería tener derecho a enfermarse / irse de vacaciones sin paralizar la empresa. Y la práctica demuestra que incluso dos no se las arreglan.



El segundo problema es la identificación personal, por ejemplo, en los recursos del archivo de la empresa, como suele ser el caso, hay información que no está destinada a miradas indiscretas, por lo que es necesario verificar cada persona que solicita acceso para ser agregada a Active Directory y otorgando ciertos grupos de acceso. Lamentablemente, no fue posible prescindir de la burocracia para resolver este problema. El procedimiento se reduce a presentar una solicitud en papel en la forma más estandarizada, firmada (preferiblemente electrónica) por el jefe del solicitante y la aprobación de este documento por personas familiarizadas con el firmante personalmente.



Después de la aprobación de la aplicación estandarizada, queda poco por hacer, agregar personas a AD, asignar los grupos de acceso necesarios y agregar una placa para sobresalir. El último punto puede parecer un poco arcaico, porque AD en sí mismo apoya bastante la auditoría de cambios, pero mi práctica muestra que este punto no es superfluo en un turno así, e incluso simplifica el proceso de encontrar un rastrillo en el caso del debriefing, que ocurre a menudo, siguiendo desde la primera conclusión ...



Pero el proceso se puede automatizar ligeramente mediante el uso de un par de scripts simples. La lógica se reduce al proceso inverso:



  1. Aprobación del estándar contable AD en la empresa
  2. Solicitamos al usuario datos en un formato uniforme.



    imagen
  3. Ingresamos datos básicos en la tabla, por ejemplo:
  4. Exportamos de Excel a un archivo CSV, una página generada automáticamente adecuada para la entrada automática en AD mediante scripts
  5. Exportamos y listo! Queda por transferir el nombre de usuario y la contraseña al usuario.


Quizás los métodos descritos por mí no se puedan llamar mejores prácticas, pero permiten en la práctica resolver el problema existente sin escribir un sistema de información separado y crear una gran cantidad de integraciones.



A continuación, describiré un par de puntos técnicos y publicaré los scripts que utilizo:

Así es como se ve una tabla apta para importar a AD:



imagen



Para mí, esta tabla se genera automáticamente a partir de la anterior, adjunto un ejemplo .



Es necesario guardar la tabla apta para importar en formato CSV (delimitado por comas)



imagen



¿Cuáles crees que serán los delimitadores si abres el archivo generado con el bloc de notas? Equivocado. Semejante - ";"



Por separado, en mi implementación, debería detenerme en la columna de transliteración. En el estándar aprobado por nosotros, algunos de los campos están llenos de transliteración de acuerdo con la muestra aprobada, y para no hacer esto cada vez que usé un script vba, aquí 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
      
      





No hagas lo que yo hice, utiliza uno de los estándares de transliteración existentes en el enlace .



El siguiente script colocado en un archivo con la extensión .ps1 le permitirá en un par de clics colocar todas las cuentas del archivo generado en el paso anterior en AD, sin importar cuántas haya. Y al mismo tiempo, colgar el grupo de anuncios en todas las UZ creadas.



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