archan
Goto Top

Mit Batch AD-Gruppe auslesen

Hi zusammen,

ich habe eine Batch-Datei, wo an jedem Rechner beim Hochfahren ausgeführt wird.
Nun soll ich dort etwas für eine bestimmte Gruppe aus dem AD hinzufügen, dass nur bei ihnen etwas vom Netzwerk lokal kopiert wird.


Wie kann ich in einer Batch eine bestimme User-Group vom AD festlegen, damit nur bei dieser Gruppe etwas vom Netzwerk kopiert wird?

Content-ID: 601911

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

Ausgedruckt am: 19.12.2024 um 12:12 Uhr

Inf1d3l
Lösung Inf1d3l 04.09.2020 aktualisiert um 10:47:14 Uhr
Goto Top
Für sowas gibt es GPP mit Zielgruppenadressierung: https://www.windowspro.de/wolfgang-sommergut/vergleich-gruppenrichtlinie ...
SlainteMhath
SlainteMhath 04.09.2020 um 10:49:20 Uhr
Goto Top
Moin,

warum machst du das nicht per GPO/GPP? Das ist genau dafür konzipiert.

Und: "Beim Hochfahren" und "Bestimmte AD-Gruppe" geht so nicht (angenommen: Du willst nach Benutzer filtern)

lg,
Slainte
Archan
Archan 04.09.2020 um 10:54:25 Uhr
Goto Top
Moin Slainte,

wir verteilen damit die Dateien von unseren Signaturen und haben bereits eine Batch, bei der ich dann nur ein bisschen was hinzufügen will.
Ja, bisher wird nach Rechnername gefiltert und dann bestimmte Rechner ausgelassen.

Ich könnte so jetzt zwar jeden einzelnen Rechner oder Benutzer festlegen, was aber auch wieder sehr mühselig ist.
SlainteMhath
SlainteMhath 04.09.2020 um 11:03:07 Uhr
Goto Top
Also ist "beim hochfahren" falsch?!

Mach einfach eine 2te GPO (die die "Zusatz"-Batch startet) und stell dort eine entsprechende Filterung ein. Schön ist das allerdings nicht
145916
Lösung 145916 04.09.2020 aktualisiert um 11:23:02 Uhr
Goto Top
Wenn man unbedingt will, warum auch immer nicht mittels GPP
@echo off
whoami /groups | find /i "DOMAIN\GruppeABC" >nul 2>&1 && (  
    echo "User in Gruppe"  
)
Wenn sowas via Skript würde ich persönlich aber gleich auf Powershell ausweichen.
if (([adsisearcher]"(SamAccountName=$env:UserName)").FindOne().Properties['memberof'] -match 'CN=MeineGruppe'){  
     # whatever to do
}
NordicMike
NordicMike 04.09.2020 um 11:15:26 Uhr
Goto Top
Signaturen von Emails? Und wenn sich jemand anderes an dem Rechner anmeldet? Kopier die Dateien einfach über Gruppenrichtlinie:

Benutzerkonfiguration -> Einstellungen -> Windows Einstellungen -> Dateien

Dann ist auch kein nerviges Batch Fenster beim Anmelden zu sehen.
blacksun
blacksun 17.07.2023 um 18:00:58 Uhr
Goto Top
Zitat von @145916:

@echo off
whoami /groups | find /i "DOMAIN\GruppeABC" >nul 2>&1 && (  
    echo "User in Gruppe"  
)

Hallo,

ich habe 2 Fragen dazu:

a) wegen 2>&1, warum leitest du den Error-Stream auf den normalen Stream?
b) Wenn die Bedingung zutrifft und jemand Mitglied der angegeben Gruppe ist, dann würde ich gerne eine definierte Variable setzen. Sprich statt dem echo würde ich gerne set inGroup=drinnen setzen
Warum funktioniert der set-Befehl an dieser Stelle nicht?

Es spielt keine Rolle ob ich die Variable inGroup bereits vorher definiert habe oder erst hier definiere.

Vielen Dank.
7426148943
7426148943 17.07.2023 aktualisiert um 18:21:00 Uhr
Goto Top
Moin.
Zitat von @blacksun:
ich habe 2 Fragen dazu:

a) wegen 2>&1, warum leitest du den Error-Stream auf den normalen Stream?
Damit sämtliche Ausgaben unterdrückt werden und nicht nur die des Stdout, brauchen wir ja hier eh alles nicht.
b) Wenn die Bedingung zutrifft und jemand Mitglied der angegeben Gruppe ist, dann würde ich gerne eine definierte Variable setzen. Sprich statt dem echo würde ich gerne set inGroup=drinnen setzen
Warum funktioniert der set-Befehl an dieser Stelle nicht?
Doch er funktioniert nur wenn innerhalb der Klammer weitere Befehle folgen muss man DelayedExpansion einschalten und die Variable mittels Ausrufezeichen statt Prozentzeichen umklammern! Weil der Interpreter alles innerhalb der als eine Anweisung sieht und Variablen darin nur erneut expandiert wenn DelayedExpansion eingeschaltet ist
Wenn man die Variable dagegen erst außerhalb der Klammern anspricht ist kein DelayedExpansion nötig.

Also entweder mit DelayedExpansion wenn die Befehle innerhalb der Klammern folgen
@echo off &setlocal enabledelayedexpansion
whoami /groups | find /i "DOMAIN\GruppeABC" >nul 2>&1 && (    
    set inGroup=drinnen
    echo !ingroup!
)
echo %ingroup%
oder so
@echo off
whoami /groups | find /i "DOMAIN\GruppeABC" >nul 2>&1 && (set inGroup=drinnen)  
echo %inGroup%

Bisschen was zu lesen, fürs Verständnis
https://ss64.com/nt/delayedexpansion.html

Zeppel