Guten Tag! In diesem Artikel möchte ich eine praktische Lösung beschreiben, die ich angewendet habe, um eine Routineaufgabe der zweiten Zeile des technischen Supports eines großen Unternehmens zu automatisieren.
Wir haben zwei geografisch verteilte AD-Domänen für 10.000 Personen, eine angewandte Lösung für die Organisation des Webzugriffs auf Remote-Desktops über RemoteApp-Anwendungen mit mehreren integrierten Informationssystemen und einer aktiv wachsenden Datenbank mit bis zu 500 Personen pro Monat. Für ~ 24 pro Arbeitstag, für ~ 3 Personen pro Stunde.
Die erste offensichtliche Schlussfolgerung aus den Eingabedaten ist, dass ein Administrator mit einer solchen Anzahl von Benutzern nicht fertig werden kann. Er sollte das Recht haben, krank zu werden / in den Urlaub zu fahren, ohne das Unternehmen zu lähmen. Und die Praxis zeigt, dass auch zwei nicht damit fertig werden.
Das zweite Problem ist die persönliche Identifizierung, beispielsweise in Bezug auf die Dateiressourcen des Unternehmens, wie es häufig der Fall ist. Es gibt Informationen, die nicht für neugierige Blicke bestimmt sind, und dementsprechend ist es erforderlich, jede Person zu überprüfen, die den Zugriff anfordert zu Active Directory und Gewähren bestimmter Zugriffsgruppen. Leider war es bei der Lösung dieses Problems nicht möglich, auf Bürokratie zu verzichten. Das Verfahren läuft darauf hinaus, einen Papierantrag in Form des standardisiertesten, vom Leiter des Antragstellers unterzeichneten (vorzugsweise elektronischen) Antrags einzureichen und dieses Dokument von Personen zu genehmigen, die mit dem Unterzeichner persönlich vertraut sind.
Nach der Genehmigung des standardisierten Antrags bleibt nur noch wenig zu tun, Personen zu AD hinzuzufügen, die erforderlichen Zugriffsgruppen zuzuweisen und eine Platte hinzuzufügen, um sich zu übertreffen. Der letzte Punkt mag etwas archaisch erscheinen, da AD selbst die Prüfung von Änderungen durchaus unterstützt, aber meine Praxis zeigt, dass dieser Punkt in einer solchen Runde nicht überflüssig ist, und vereinfacht sogar das Auffinden eines Rechen im Falle einer Nachbesprechung, die tritt häufig auf, nach der ersten Schlussfolgerung ...
Der Prozess kann jedoch mithilfe einiger einfacher Skripte leicht automatisiert werden. Die Logik läuft auf den umgekehrten Prozess hinaus:
- Genehmigung des AD-Rechnungslegungsstandards im Unternehmen
- Wir bitten den Benutzer um Daten in einem einheitlichen Format.

- Wir geben grundlegende Daten in die Tabelle ein, zum Beispiel:
- Wir exportieren aus Excel in eine CSV-Datei, eine automatisch generierte Seite, die für die automatische Eingabe in AD mithilfe von Skripten geeignet ist
- Wir exportieren und voila! Es bleibt, den Benutzernamen und das Passwort an den Benutzer zu übertragen.
Vielleicht können die von mir beschriebenen Methoden nicht als Best Practice bezeichnet werden, aber sie ermöglichen es in der Praxis, das bestehende Problem zu lösen, ohne ein separates Informationssystem zu schreiben und eine große Anzahl von Integrationen zu erstellen.
Als nächstes werde ich einige technische Punkte beschreiben und die von mir verwendeten Skripte veröffentlichen:
So sieht eine Tabelle aus, die für den Import in AD geeignet ist:
Für mich wird diese Tabelle automatisch aus der vorherigen generiert, ich füge ein Beispiel hinzu .
Es ist notwendig, die für den Import geeignete Tabelle im CSV-Format (durch Kommas getrennt) zu speichern.
Was denken Sie, werden die Trennzeichen sein, wenn Sie die generierte Datei mit dem Editor öffnen? Falsch. Eine solche - ";"
In meiner Implementierung sollte ich mich separat mit der Transliterationsspalte befassen. In dem von uns genehmigten Standard sind einige Felder gemäß dem genehmigten Beispiel mit Transliteration gefüllt. Um dies nicht jedes Mal zu tun, wenn ich ein VBA-Skript verwendet habe, ist hier:
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
Tun Sie nicht so wie ich, verwenden Sie bitte einen der vorhandenen Transliterationsstandards aus dem Link .
Mit dem nächsten Skript, das in einer Datei mit der Erweiterung .ps1 abgelegt wird, können Sie mit wenigen Klicks alle Konten aus der im vorherigen Schritt generierten Datei in AD ablegen, unabhängig davon, wie viele vorhanden sind. Und gleichzeitig die Anzeigengruppengruppe an alle erstellten UZ hängen.
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
}