Kategorien
Scripte

How to create Active Directory User

Binäre Darstellung

Benutzer im Active Directory erzeugen

Ein Active Directory Benutzer ist ein Benutzerkonto, das in einer Windows-basierten Netzwerkumgebung über das Active Directory (AD) erstellt und verwaltet wird. Dieses Konto ermöglicht es einem Benutzer, sich an Computern im Netzwerk anzumelden und Ressourcen wie Dateien und Drucker zu nutzen. Das Active Directory speichert Informationen über den Benutzer, einschließlich seines Namens, Passworts und Zugriffsrechten, und ermöglicht die zentrale Verwaltung von Benutzerkonten und deren Berechtigungen in einer Organisation.

Ihr wollt nicht immer wieder die Active Directory (AD)-Benutzer MMC öffnen, herum klicken, Tippfehler machen und zum x-ten Mal ein neues Benutzerkonto erstellen? Wenn dies der Fall ist, ist es Zeit das Hinzufügen eines Benutzers zu automatisieren.

Wie meistens existieren hierfür mehrere Wege, die alle zum Ziel führen.
Der Erste ist, einen Benutzer mittels Script anzulegen und die benötigten Attribute mitzugeben.
Ein Zweiter Weg ist, einen vorhandenen Benutzer zu kopieren. In dem Fall ist ein Referenzobjekt erforderlich. Die dritte Möglichkeit besteht darin mittels einer csv-Liste die Objekte und Eigenschaften zu übermitteln.

Für welchen Weg ihr euch entscheidet müsst ihr selbst festlegen.

Code

Hier ist der zentrale Source Code zu der Prozedur User anlegen.
Anpassen müsst ihr nur Domain, und natürlich eine Userliste bereitstellen.

'User anlegen in der root der Domain
Private Sub mnu_User_Create_Click()
Dim objAs, sUser, sOU, sGroup
Dim Container As IADsContainer
Dim user As IADsUser
Dim objUser
'Variablen belegen
sLastName = cNachname.Text
sGivenName = cVorname.Text
sFullname = sLastName & " " & sGivenName
sDescription = "User"
Set adsi = GetObject("LDAP:")
Dim dc(10)

tmp = Domain.Text
i = 1
While (InStr(1, tmp, ".")) <> 0
laenge = Len(tmp): punkt = InStr(1, tmp, "."):_
dc(i) = Left(tmp, punkt - 1) & ",": rest = laenge - punkt
tmp = Right(tmp, rest): i = i + 1
Wend
dc(i) = tmp
For K = 1 To i
  DomSTR2 = DomSTR2 & "dc=" & dc(K)
Next K
DomSTR = Domain.Text & "/" & DomSTR2
  Set objAs = adsi.OpenDSObject("LDAP://" &_
  DomSTR, admin.Text, adminpwd.Text, 1)
  Set objUser = objAs.Create("User", "CN=" & sFullname)
  objUser.FullName = sFullname
  objUser.Description = sDescription
  objUser.LastName = sLastName
  objUser.GivenName = sGivenName
  objUser.Put "company", "Company"
  
  objUser.Put "samAccountname", LCase(cAccountname)
  objUser.Put "UserPrincipalName",_
  LCase(cAccountname) & "@" & Domain
  objUser.SetInfo
Kontrollfeld.Text = Err.Number & " ; " & Err.Description
  Err.Clear
  
  Set user = adsi.OpenDSObject("LDAP://" &_
  Domain & "/" & "CN=" & sFullname & "," &_
  DomSTR2, admin.Text, adminpwd.Text, 1)
  Set Container = GetObject(user.Parent)
  user.AccountDisabled = False
  user.SetPassword (cpassword.Text)
  user.SetInfo
  If Err.Number = 0 Then cerror =_
  "User erfolgreich angelegt" Else cerror =_
  Err.Number & " ; " & Err.Description
  Kontrollfeld.Text = cerror
  Err.Clear
End Sub

Dieses Scriptstück ist inzwischen etwas in die Jahre gekommen.

Inzwischen verwende ich Powershell zur Lösung derartiger Aufgaben. Mit New-ADUser erreicht ihr hier einen besseren Code bei der Umsetzung. Hier nur ein Beispiel.

New-ADUser -Name "h.muster" -OtherAttributes @{'title'="your title";'mail'="h.muster@yourdomain.de"}

Es ist auch sehr einfach alle bekannten Attribute bei der Anlage mitzugeben wie Passwort, Standort, Organisation, Homelaufwerk, Gültigkeitszeitraum, Telefondaten, Stadt usw. Toll daran ist, ihr könnt das mit einem einzigen Powershell Befehl umsetzen.

Vorrausetzungen:

  • Windows PowerShell 5.1 auf eurem Rechner muss vorhanden sein.
  • Remote Server Administration Tools (RSAT). Dieses Paket installiert das Active Directory PowerShell Modul welches das New-AdUser cmdlet beinhaltet.
  • Ihr müsst an einem Rechner angemeldet sein, der Mitglied der Domain ist in der ihr die User anlegen wollt.
  • Der benutzte AD Account muss über die Berechtigungen verfügen Bentzer anzulegen.

Diesen Code verwendet ihr auf eigene Gefahr. Voraussetzung sind entsprechende Berechtigungen auf die AD Struktur. Ich übernehme keine Gewährleistung.

Michael Leidig
Kategorien
Scripte

Multiple AD Groups – how to create?

CSS Programming Image

Ziel:

Das Ziel ist die automatisierte Anlage von Active Directory Gruppen für die Datei- und Ordnerberechtigungen. (Multiple AD Groups)

Angelegt wird eine domainlokale und eine globale Gruppe. Beide werden verschachtelt. (globale Gruppe als Mitglied der domainlokalen Gruppe).

Etwaige Benutzerobjekte werden dann im Anschluss (manuell) in die erzeugte globale Gruppe aufgenommen.

Angepasst werden muss je nach Bedarf Ablageort (OU) für eure spezifische Umgebung.

'Lokale und Globale Gruppe anlegen, verschachteln und Beschreibung setzen
Const ADS_GROUP_TYPE_GLOBAL_GROUP = 2
Const ADS_GROUP_TYPE_DOMAIN_LOCAL_GROUP = 4
Const ADS_GROUP_TYPE_UNIVERSAL_GROUP = 8
Const ADS_GROUP_TYPE_SECURITY_ENABLED = &h80000000

Name=InputBox("Gruppennamen?","Userinput")

G_Group = Name + "GLOBAL"
L_Group = Name + "LOCAL"

' GetObject
Set ou = GetObject("LDAP://rootdse")

Set gruppe = ou.Create("group", "cn=" + G_Group)
gruppe.sAMAccountName = G_Group
gruppe.groupType = ADS_GROUP_TYPE_GLOBAL_GROUP_
 + ADS_GROUP_TYPE_SECURITY_ENABLED
gruppe.SetInfo
Set gruppe_G = ou.GetObject("group", "cn=" + G_Group)

' GetObject
Set ou = GetObject("LDAP://rootdse")

Set gruppe = ou.Create("group", "cn=" + L_Group)
gruppe.sAMAccountName = L_Group
gruppe.groupType = ADS_GROUP_TYPE_DOMAIN_LOCAL_GROUP_
 + ADS_GROUP_TYPE_SECURITY_ENABLED
gruppe.SetInfo
Set gruppe_L = ou.GetObject("group", "cn=" + L_Group)

gruppe_L.Add gruppe_G.ADsPath

MsgBox "Gruppen angelegt sowie globale in lokale Gruppe aufgenommen."

Domainlokale und globale Gruppen sind Konzepte in Active Directory, einem Verzeichnisdienst von Microsoft, der zur Verwaltung von Benutzern, Gruppen und Ressourcen in einer Windows-Domäne verwendet wird. Hier ist der Unterschied zwischen domainlokalen und globalen Gruppen:

  1. Globale Gruppen:
    • Globale Gruppen dienen hauptsächlich zur Verwaltung von Benutzerkonten und Gruppen aus der gesamten Domäne.
    • Sie können Mitglieder aus derselben Domäne und auch Mitglieder aus vertrauenden Domänen enthalten.
    • Globale Gruppen können in andere globale Gruppen derselben Domäne oder in domainlokale Gruppen derselben Domäne eingebettet werden.
    • Sie sind am besten geeignet, um Zugriff auf Ressourcen und Berechtigungen zu verwalten, die auf Domänenebene gelten sollen.
  2. Domainlokale Gruppen:
    • Domainlokale Gruppen werden normalerweise verwendet, um den Zugriff auf Ressourcen und Berechtigungen auf Servern und Ressourcen in derselben Domäne zu steuern.
    • Sie können Mitglieder aus derselben Domäne sowie aus anderen Domänen enthalten.
    • Domainlokale Gruppen können in globale Gruppen und andere domainlokale Gruppen eingebettet werden.
    • Sie sind am besten geeignet, um Zugriff auf lokale Ressourcen, wie z.B. Dateifreigaben auf einem Server, zu steuern.

In der Regel wird eine Organisationsstruktur in Active Directory so aufgebaut, dass globale Gruppen Benutzer zusammenfassen, die ähnliche Aufgaben oder Berechtigungen haben. Diese globalen Gruppen werden dann in domainlokale Gruppen eingebettet, um den Zugriff auf spezifische Ressourcen zu kontrollieren. Diese Struktur bietet Flexibilität bei der Verwaltung von Berechtigungen und erleichtert die Verwaltung von Benutzern und Ressourcen in einer Active Directory-Umgebung.

Die Ausführung bestimmter Tools erfordert spezielle Rechte (administrativer Art). Ich übernehme keinerlei Gewährleistung für evtl. auftretende Schäden. Sie benutzen das Tool auf eigene Gefahr. Bitte sichern Sie zuvor Ihre Daten!

Michael Leidig

Bei Fragen benutzt das Kontaktformular.

Kategorien
Scripte

How to set Active Directory Profile

Binäre Darstellung

Active Directory set ProfilePath

Diese Prozedur setzt im Active Directory pro Organisationseinheit den Profilpfad aller enthaltener Userobjekte. Der UNC Pfad zu dem Profil wird angegeben. Das Verzeichnis selbst wird gleich dem Anmeldenamen gesetzt. Der LDAP Pfad wird am Anfang aus der Domain extrahiert.

Dim objAs, objUser, sUser, oDomain, oComputer
Dim group As IADsGroup
Dim Container As IADsContainer
Dim user As IADsUser
Dim computer As IADsComputer
Dim ListeOU(1000)
Dim strLDAPQuery ' As String
Dim objCON ' As ADODB.Connection
Dim W$, Anzahl
Dim BS, Ver, CName, WS
Dim Bereich
AnzahlOU = 1
Kontrollfeld.Text = ""
On Error Resume Next
Kontrollfeld.Text = ""
Set objCON = CreateObject("ADODB.Connection")
CONSTRING = "Provider=ADSDSOObject"
objCON.Open CONSTRING

Dim dc(10)
tmp = Domain.Text
i = 1
While (InStr(1, tmp, ".")) <> 0
laenge = Len(tmp)
punkt = InStr(1, tmp, ".")
dc(i) = Left(tmp, punkt - 1) & ","
rest = laenge - punkt
tmp = Right(tmp, rest)
i = i + 1
Wend
dc(i) = tmp
For K = 1 To i
  DomSTR2 = DomSTR2 & "dc=" & dc(K)
Next K
DomSTR = Domain.Text & "/" & DomSTR2 & ">"
strLDAPQuery = "

Wie immer, ihr benutzt die Prozeduren auf eigene Gefahr. Ihr benötigt hierfür teilweise Adminrechte. Prüft in einem Testsystem ob alles so funktioniert wie ihr wollt.

Kategorien
Scripte

How to read Active Directory Users?

Binäre Darstellung

Vorgestellt wird hier ein Source Code für Visual Basic 6 zum Auslesen eines Active Directory und Erstellung einer Userdatei im CSV Format.
Wie oft ist es schon vorgekommen. Ihr braucht mal eben ganz schnell eine Liste aus dem AD um irgendwelche Abgleiche oder Listen zu erstellen.

Das ist es gut wenn ihr ein Script parat habt welches die Rohdaten bereitstellt. Und wenn möglich auch noch recht fix. Darum habe ich mir vor einiger Zeit darüber Gedanken gemacht. Daraufhin entstand dieses kleine Script.

Ausgegeben werden:

  • SAMAccountname -> Anmeldename
  • Lastname -> Nachname
  • Givenname -> Vorname
  • TelephoneNumber -> hinterlegte Telefonnummer
  • Mail -> Mailadresse
  • location -> Standort, wenn eingetragen natürlich
  • street -> Straße
  • LDAP-Pfad -> Pfad in der AD Struktur
  • Department -> Abteilung
  • HomeDirectory -> persönliches Laufwerk
  • LogonScript -> verwendetes, dem Benutzer zugewiesenes Anmeldescript
  • IsAccountLocked -> Ist der Account gesperrt?
  • userWorkstations – w
  • Wenn eingetragen, an welchen Computerobjekten ist eine Anmeldung erlaubt.
Dim objAs, objUser, sUser, oDomain, oComputer
Dim ListeOU(5000), strLDAPQuery, objCON, Anzahl, Bereich
Kategorien
Scripte

PowerShell & Registry ein mächtiges Duo

Powershell Logo

Die Windows-Registrierung ist eine zentrale Datenbank, in der Windows Informationen über Systemeinstellungen, installierte Programme und Hardwarekonfigurationen speichert.

Mit PowerShell können Sie die Windows-Registrierung einfach bearbeiten. Dementsprechend findet man hier eine Beschreibung und Beispiele.

Registry-Schlüssel lesen

Verwenden Sie den Befehl Get-ItemProperty, um die Werte eines bestimmten Registry-Schlüssels abzurufen.

Zum Beispiel:

Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion" -Name "ProgramFilesDir"

Dieser Befehl ruft den Wert des “ProgramFilesDir”-Eintrags im “CurrentVersion”-Unterschlüssel des “HKCU:\Software\Microsoft\Windows”-Pfads ab.

Registry-Schlüssel erstellen

Verwenden Sie den Befehl New-Item, um einen neuen Registry-Schlüssel zu erstellen.

Zum Beispiel:

New-Item -Path "HKCU:\Software\MyApp"

Dieser Befehl erstellt den “MyApp”-Schlüssel im “HKCU:\Software”-Pfad.

Registry-Wert erstellen/ändern

Sie können den Befehl Set-ItemProperty verwenden, um einen Wert in einem Registry-Schlüssel zu erstellen oder zu ändern.

Zum Beispiel:

Set-ItemProperty -Path "HKCU:\Software\MyApp" -Name "Version" -Value "1.0"

Dieser Befehl erstellt oder ändert den Wert des “Version”-Eintrags im “MyApp”-Schlüssel.

Registry-Schlüssel löschen

Verwenden Sie den Befehl Remove-Item, um einen Registry-Schlüssel zu löschen.

Zum Beispiel:

Remove-Item -Path "HKCU:\Software\MyApp

Dieser Befehl löscht den gesamten “MyApp”-Schlüssel.

Es ist wichtig zu beachten, dass die Änderungen an der Windows-Registry vorsichtig vorgenommen werden sollten. Sie haben Auswirkungen auf die Stabilität des Systems. Stellen Sie sicher, dass Sie vor dem Bearbeiten der Registry eine Sicherungskopie erstellen oder genau wissen, welche Änderungen Sie vornehmen.

Interessant wird die Bearbeitung von Registry Einträgen im Zusammenhang mit dem nachfolgenden Absatz zu Remote Powershell. Der Nutzen hierbei ist für automatisierte Vorgänge wie Installation und Konfigurationen offensichtlich.

Remote Powershell nutzen

Remote PowerShell ist eine Funktion, die es Administratoren ermöglicht, PowerShell-Befehle und -Skripte von einem Computer aus auf entfernten Computern oder Servern auszuführen. Es handelt sich um eine leistungsstarke Methode zur Verwaltung von Computern und zur Automatisierung von Aufgaben in einer Netzwerkumgebung.

Mit Remote PowerShell kann eine Verbindung zu einem entfernten Computer hergestellt werden, auf dem PowerShell aktiviert ist. Sobald die Verbindung hergestellt ist, können Befehle und Skripte lokal auf dem Remotecomputer ausgeführt werden, als ob sie direkt auf diesem Computer eingegeben würden.

Die Verwendung von Remote PowerShell hat mehrere Vorteile. Administratoren können Aufgaben auf mehreren Computern gleichzeitig ausführen. Das spart Zeit und Aufwand. Skripte können zur Automatisierung von Aufgaben entwickelt und auf entfernten Computern bereitgestellt werden.

Beispiel für einen remote Aufruf

Enter-PSSession -ComputerName MyComuter
Set-Location HKLM:\SOFTWARE\MySoftwareItem
Remove-Item "MySoftwareItem"
Exit-PSSession

Sollte nicht schwer sein hier mit einer Liste zu arbeiten.

Zuletzt noch etwas zur Umgebung. Voraussetzung ist, sowohl der lokale als auch der entfernte Computer müssen über PowerShell verfügen und Remote PowerShell aktiviert haben. Die Verbindung zwischen den Computern erfolgt über das Windows Remote Management (WinRM) Protokoll.