luciuscastus
Goto Top

CMD Script: Automatischer User Import to GlobalGroup

Hallo, ich habe folgendes Problem.

Beispiel:
Für eine Ordnerstuktur Laufwerk (Z) sind "Local Group" angelegt worden.

LG_LAUFWERK_Vertrieb_Einkauf
LG_LAUFWERK_Vertrieb_Verkauf

Z:\Vertrieb\Einkauf
Z:\Vertrieb\Verkauf

Anhand eines Organisationscodes FIRMA-ABTEILUNG-TEAM (FIRMA-Vertieb-Einkauf) soll ein User in die entsprechende "GlobalGroup" importiert werden.

Franz Mustermann (FI-VT-EK)
Hans Wurst (FI-VT-VK)


Die Frage ist nun wie kann man das am einfachsten verwirklichen?

Ich hatte an ein Script gedacht, dass in einem AD-User unter Eigenschaften\Organisation\Abteilung einen hinterlegten Orga-Code ausließt und anhand diesem einen Import in die entsprechende Gruppe ausführt.


Grüße Lucius

Content-ID: 246865

Url: https://administrator.de/contentid/246865

Ausgedruckt am: 21.11.2024 um 21:11 Uhr

SlainteMhath
SlainteMhath 19.08.2014 um 16:44:50 Uhr
Goto Top
Moin,

Ich hatte an ein Script gedacht, dass in einem AD-User unter Eigenschaften\Organisation\Abteilung einen hinterlegten Orga-Code ausließt und anhand diesem einen Import in die entsprechende Gruppe ausführt.
Das sollte sich per Powershell lösen lassen. Was ich nicht verstehe ist, warum ihr lokale Gruppen verwendet, wenn ihr ein AD habt.

lg,
Slainte
LuciusCastus
LuciusCastus 19.08.2014 um 17:00:32 Uhr
Goto Top
Local Groups in der AD nicht Lokale Gruppen, Sorry wird gleich verbessert.
colinardo
colinardo 19.08.2014 aktualisiert um 18:03:17 Uhr
Goto Top
Moin LuciusCastus,
Die Frage ist nun wie kann man das am einfachsten verwirklichen?
aus der Schulter geschossen mit Powershell etwa so, wenn die Gruppe im Abteilungs-Feld des jeweiligen Userobjektes steht:
Import-Module ActiveDirectory
get-aduser -Filter * -properties Department | ?{$_.Department -like "*-*-*"} | %{add-adgroupmember -Identity $_.Department -Members $_}  
Ansonsten würde auch eine simple CSV-Datei ausreichen die das Powershell-Script ausliest, in denen die User und deren Gruppen aufgelistet sind, dann musst du nicht jedes Userobjekt manuell anpacken um den Gruppennamen dort zu hinterlegen.

Grüße Uwe
LuciusCastus
LuciusCastus 21.08.2014 aktualisiert um 14:18:21 Uhr
Goto Top
Es hat sich ein kleiner Denkfehler eingeschlichen.
1. Es gibt Globale Gruppen, in denen die User der Abteilungen Mitglieder sind. (Soll Scriptbasiert nach ORGA-Code den Globalen Gruppen zugewiesen werden.)
z.B: Globale Gruppe (ORGA-CODE)
Abt_Verkauf (XX-S-VK)
Abt_Einkauf(XX-S-EK)
Abt_Marketing (XX-VF-MT)
Abt_Rechnungswesen (XX-RW)

Import-Module ActiveDirectory
Get-ADUser -Filter "Department -like 'XX-S-VK'” | ...............................
Die User sind bereits in der Domäne, dass heißt ein .vcs Import würde da eventuell nicht so einfach sein?
Deshalb habe ich mir gedacht, dass ich den Usern die ORGA-Codes unter "Department(Abteilung)" einpflege.
Im Script sollten dann alle User die in der gleichen OU sind, nach deren Eintragung unter Department prüfen.
Im Fall, dass 25 User XX-S-VK darin stehen haben, sollen diese in die Global Group "Abt_Verkauf" hinzugefügt werden.

Den Lokalen Gruppen werde ich dann die entsprechenden Globalen Gruppen manuell hinzufügen.

Den letzten Schritt habe ich bereits gelöst:
Lokale Gruppen nach der Ordnungsstruktur aufbauen und die Vergabe der Sicherheitsrichtlinien der Ordner.
colinardo
colinardo 21.08.2014 aktualisiert um 14:54:37 Uhr
Goto Top
Die User sind bereits in der Domäne, dass heißt ein .vcs Import würde da eventuell nicht so einfach sein?
Quatsch, kein Thema. Wenn du schon jedes Userobjekt von Hand anpackst kannst du ja gleich den User einer Gruppe manuell zuweisen ...der Aufwand wäre der gleiche ...
Also mach dir eine CSV-Datei in folgender Art:
SamAccountName;Group
maxmuster;Abt_Verkauf
annamusterfrau;Abt_Marketing
dann kannst du hiermit die Gruppenmitgliedschaft für alle User der CSV-Datei festlegen:
Import-Module ActiveDirectory
$csv = Import-CSV 'c:\users.csv' -delimiter ";"  
$csv | %{
add-adgroupmember -Identity $_.Group -Members $_.SamAccountName
}
und feddich ist die Laube ...

eine Liste aller User bzw. eine CSV-Vorlage kannst du dir ja auch mit get-aduser generieren, dann brauchst du nur noch z.B. mit Excel die Gruppen zuweisen, wieder als CSV speichern und mit obigem Script reinladen.

Beispiel Export aller User aus dem AD in eine CSV:
get-aduser -Filter * | select SamAccountName | export-csv 'c:\users.csv' -delimiter ";" -NoType
LuciusCastus
LuciusCastus 22.08.2014 um 14:49:41 Uhr
Goto Top
Dann würde ich am besten erstmal eine .csv Datei exportieren mit den Daten die sowieso bereits vorhanden sind.
Die User Daten in der .csv könnte ich dann aktuell halten und die AD damit auf einem Überblick aktualisieren.

Leider klappt der Befehl zum exportieren in eine csv nicht ganz so wie ich mir das vorgestellt habe.
get-aduser -Filter * | select SamAccountName, Givenname, Surname, Group, telephoneNumber | export-csv 'c:\users.csv' -delimiter ";" -NoType

bei Group steht in der .csv Microsoft.ActiveDirectory.Management.ADPropertyValueCollection und telephoneNumber gibt er garnichts aus.
colinardo
Lösung colinardo 22.08.2014 aktualisiert um 17:34:44 Uhr
Goto Top
Zitat von @LuciusCastus:
Leider klappt der Befehl zum exportieren in eine csv nicht ganz so wie ich mir das vorgestellt habe.
get-aduser -Filter * | select SamAccountName, Givenname, Surname, Group, telephoneNumber | export-csv 'c:\users.csv'
-delimiter ";" -NoType

bei Group steht in der .csv Microsoft.ActiveDirectory.Management.ADPropertyValueCollection und telephoneNumber gibt er garnichts
aus.
so kann es auch nicht laufen, denn die erweiterten Attribute musst du bei get-aduser angeben :
get-aduser -Filter * -properties telephoneNumber | select SamAccountName, Givenname, sn, telephoneNumber | export-csv 'c:\users.csv' -delimiter ";" -NoType 
SamAccountName,givenname, surname sind Standardmäßig in der Ausgabe von get-aduser enthalten und müssen nicht angegeben werden, jedoch telephoneNumber schon!
Group gibt es nicht, dafür gibt es memberOf.

Bitte lese dir die Grundlagen zur Arbeit mit powershell und AD durch bevor wir hier jetzt für dich wieder das Rad neu erfinden müssen. Es gibt hier nämlich noch einiges mehr zu beachten. Merci.
http://www.powershellpro.com/powershell-tutorial-introduction/powershel ...

Grüße Uwe
LuciusCastus
LuciusCastus 26.08.2014 um 16:52:25 Uhr
Goto Top
Vielen Dank ich bin noch ziemlich neu in dem Thema.
Hier meine Lösungen die funktionieren und anbei noch eine Frage

USER EXPORT:
get-aduser -Filter * -SearchBase "OU=OU,DC=Domäne,DC=net" -properties telephoneNumber, department | select SamAccountName, Givenname, Surname, telephoneNumber, department | export-csv 'c:\users.csv' -delimiter ";" -NoType

Erstellen von Global Groups per CSV:
Import-Module ActiveDirectory
Import-Csv 'C:\...............\Orga.csv' -delimiter ';' |
ForEach {New-ADGroup -GroupScope Global -Name $_.GroupName -GroupCategory Security -Description $_.OrgaCode -Path "OU=GG_OU,OU=OU,DC=Domäne,DC=net"}

??? Hier ersetzt er mir leider nicht die Description wenn die Gruppe bereits vorhanden ist,
kann ich das irgendwie in mein Script einbauen ohne ein erneutes Set-ADGroup Script zu erstellen?

Hast du vlt. noch eine Lösung parat.
colinardo
colinardo 26.08.2014 aktualisiert um 18:23:57 Uhr
Goto Top
Import-Csv 'C:\...............\Orga.csv' -delimiter ';' | %{  
  if(get-adgroup -Filter {SamAccountName -eq $_.GroupName}){
    # Gruppe vorhanden also setze die Infos der Gruppe mit set-adgroup
    Set-AdGroup $_.GroupName -Replace @{Description=$_.OrgaCode}
  }else{
    # Gruppe wurde nicht gefunden also lege sie an
    New-ADGroup -GroupScope Global -Name $_.GroupName -GroupCategory Security -Description $_.OrgaCode -Path "OU=GG_OU,OU=OU,DC=Domäne,DC=net"  
  }
}