kaineanung
Goto Top

User-GPO nur in einer bestimmten OU betreiben?

Hallo Leute,

ich habe da mal eine Frage bzw. wie es sich herausgestellt hat ein kleines Problem.

Ich habe eine GPO die diverse Usereinstellungen verwaltet und ein Userscript im Hintergrund beim Anmelden ausführt.
Diese GPO soll nur auf virtuellen Clients (Horizon / vSphere) ausgeführt werden nachdem sich die User dort angemeldet haben.
Meldet sich der gleiche User auf seiner physikalsichen Maschine in der Firma an, so soll diese GPO nicht ausgeführt werden.

Ich habe eine OU "Horizon" erstellt und die dynamsich erstellten virtuellen Dekstops landen automatisch in dieser OU (ist so eingestellt und verifiziert -> die Clients werden tatsächlich nach dem erstellen Seitens Horizon in diese OU geschoben).

Nun wird die GPO jedoch nicht ausgeführt. Ist sie nicht in der OU sondern in der Domänen-Ebene verknüpft (also für alle Clients dieser Domäne aktiviert), so wird sie ausgeführt.
Somit ist die Schlussfolgerung: User-GPO, auch wenn es eine reine User-GPO ist und nicht vermischt mit Computer-GPO-Elemente, können nicht per OUs gesteuert werden.

Ist meine Schlussfolgerung richtig so? Wenn nein: was mache ich falsch? Wenn doch: wie sieht dann die Lösung aus?

Also nochmal: ich brauche diverse User-Einstellungen per GPO und ein Anmeldescript in der GPO welche aber nur dann ausgeführt werden wenn der User sich an bestimmte Desktops anmeldet (Horizon-Clients, welche z.b. in einer OU zusammengefasst sind).

Ich danke schon einmal im Voraus für jegliche Unterstützung für mein Problem.

Content-Key: 2024771604

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

Printed on: April 27, 2024 at 20:04 o'clock

Member: Doskias
Doskias Feb 28, 2022 updated at 11:11:54 (UTC)
Goto Top
Moin,

Basiseinstellung bzw. Fehler. face-smile

Eine Benutzer-GPO wird nur für Benutzer ausgeführt. Sind in der OU Rechner und keine Benutzer wird diese nicht ausgeführt. Du kannst das verhalten ändern: Stichwort Loopback-Verarbeitungsmodus oder du lässt sie im Benutzerverzeichnis ausführen, erstellst aber einen WMI-Filter, der als Ergebnis nur deine Rechner aus der OU ausführt. In dem Fall ist die GPO dann der User-OU zugeordnet, wird aber durch den WMI-Filter dennoch nur auf den Clients ausgeführt, die du willst.

Gruß
Doskias
Member: DerWoWusste
DerWoWusste Mar 01, 2022 at 08:43:17 (UTC)
Goto Top
Ich würde einen geplanten Task per Group Policy preference item verteilen der das Skript startet (Trigger: bei Anmeldung) und dort die Filterung ("item level targeting") vornehmen, die schaut, in welcher OU der Client ist.
Member: kaineanung
kaineanung Mar 01, 2022 at 13:18:30 (UTC)
Goto Top
Zitat von @Doskias:

Moin,

Basiseinstellung bzw. Fehler. face-smile

Eine Benutzer-GPO wird nur für Benutzer ausgeführt. Sind in der OU Rechner und keine Benutzer wird diese nicht ausgeführt. Du kannst das verhalten ändern: Stichwort Loopback-Verarbeitungsmodus oder du lässt sie im Benutzerverzeichnis ausführen, erstellst aber einen WMI-Filter, der als Ergebnis nur deine Rechner aus der OU ausführt. In dem Fall ist die GPO dann der User-OU zugeordnet, wird aber durch den WMI-Filter dennoch nur auf den Clients ausgeführt, die du willst.

Gruß
Doskias

Das mit dem WMI-Filter gefällt mir. Ich habe nun auch einen erstellt nur leider funktioniert es nicht. Ist der WMI-Filter deaktiviert wird es ausgeführt (natürlich dann in der ganzen Domäne an jedem PC). Sobald ich den WMI-Filter aktiviere geht dieser gar nicht.

In der Powershell habe ich mit gwmi -Query "SELECT * FROM Win32_Group WHERE Domain = "subdomain.mycompany.local" and Name = "Horizon"' mein Filter getestet und tatsächlich listet er mir dann als Treffer die OU in einer Liste mit Caption, Domain, Name und SID. Wenn ich eine nicht existente OU bei "Name" angebe, bekomme ich nichts zurück. Übrigens: Natürlich ist das o.g. "Subdomain" und "MyCompany" durch echte Domainnamen ersetzt.

Also ergeben sich daraus 2 Fragen meinerseits:
1. Wenn ich in der Powershell den Befehl

gwmi -Query "Meine Abfrage"   

ausführe und dadurch ein Ergebnis in Listenform bekomme mit Name, Domäne und SID, ist das dann ein Treffer und der WMI-Filter somit korrekt und valide?

2. Wenn Punkt 1 korrekt, was könnte in der WMI-Filterung in der GPO falsch laufen? GPREUSLT liefert den eindeutigen Beweis zurück das das GPO durch WMI-Filterung abgelehnt wird sobald diese aktiviert wird. Der Filter ist 1:1 identisch mit dem aus der powershell.
Member: DerWoWusste
DerWoWusste Mar 01, 2022 at 13:29:54 (UTC)
Goto Top
Ich frage mich, warum Du meinem Vorschlag nicht folgst, denn er macht das Selbe. Item level targeting sind WMI-Filter. Du musst hier nichts weiter beachten, da es von Windows vorgefertigt kommt.
Member: kaineanung
kaineanung Mar 01, 2022 updated at 13:50:48 (UTC)
Goto Top
Zitat von @DerWoWusste:

Ich frage mich, warum Du meinem Vorschlag nicht folgst, denn er macht das Selbe. Item level targeting sind WMI-Filter. Du musst hier nichts weiter beachten, da es von Windows vorgefertigt kommt.


Hallo, danke für dein Vorschlag. Ich habe jedoch bereits gestern den Vorschlag mit der WMI-Filterung bekommen und schon 'vorgearbeitet' bis ich heute dein Vorschlag gelesen habe.
Dazu kommt noch: ich mag Dinge als "Geplanter Task" nicht wirklich. Das scheint mir nicht der Weg zu sein den sich MS vorgestellt hat. Natürlich nutze ich in letzter Konsequenz auch solche "Tricks", aber zuerst klappere ich die mir bekannten Dinge ab (WMI-Filterung habe ich schonmal gehört und kurz auch in Kontakt damit gewesen).

Was ist nochmals genau das "Item Targeting"? Das ist nicht die Zielgruppenadressierung, oder?
Ich verteile also per GPP ein Task den ich so einstellen kann das nur bei der Anmeldung ausgeführt wird? Dieser Task kann dann per was genau prüfen ob der PC in entsprechender OU ist und bei TRUE dann ausgeführt wird andernfalls nicht?
Member: DerWoWusste
DerWoWusste Mar 01, 2022 at 13:54:14 (UTC)
Goto Top
Microsoft hat sich nicht "vorgestellt", wie Du Dinge löst. Aber sie bieten mit der Zilegruoppenadressierung zusammenklickbare WMI-Filter, die dann, wenn Sie greifen, einen Task veranlassen, genau wie Du es benötigst.
Member: Doskias
Doskias Mar 01, 2022 at 13:57:52 (UTC)
Goto Top
Also ich persönlich würde auch DWWs Vorschlag folgen. Der ist einfacher, bin ich aber nicht drauf gekommen face-smile

Ja, Zielgruppenadressierung. da wählst du dann einfach aus welches Objekt gültig sein soll. also in deinem Beispiel:
Organisationseinheit Horizon

Wenn du dennoch weiter mit WMI experimentieren willst um es zu lernen:

In der Powershell habe ich mit gwmi -Query "SELECT * FROM Win32_Group WHERE Domain = "subdomain.mycompany.local" and Name = "Horizon"' mein Filter getestet und tatsächlich listet er mir dann als Treffer die OU in einer Liste mit Caption, Domain, Name und SID. Wenn ich eine nicht existente OU bei "Name" angebe, bekomme ich nichts zurück.

Wenn du dich gestern schon damit beschäftigt hast:
Die Seite hier gelesen? Dort steht
Abfragen dürfen keine Arrays zurückgeben
Eine Einschränkung von WMI-Filtern besteht darin, dass sie keine Abfragen auswerten können, die als Ergebnis ein Array zurückliefern. Das gilt beispielsweise für die Eigenschaft MUILanguages der Klasse Win32_OperatingSystem oder für ChassisTypes in Win32_SystemEnclosure
Ohne es zu testen klingt es für mich danach, als hättest du als Ergebnis ein Array zurück bekommen, habe deine Abfrage aber jetzt nicht getestet.

Noch ein weiterer Tipp: Zielgruppenadressierung ist deutlich performanter als WMI-Filter
Member: kaineanung
kaineanung Mar 01, 2022 at 14:34:56 (UTC)
Goto Top
@Doskias

In der Powershell bekomme ich bei gleicher Abfrage ja eine Zeile zurückgeliefert. Ich hatte eher gehofft eine 0 oder 1 bzw. FALSE oder TRUE zuückgeliefert zu bekommen aber jetzt bin ich mir nicht mehr sicher wie ich diese ganze Zeile intepretieren soll? Ein Array mit einem Element würde ich dann fast sagen...

Welche Abfrage sollte ich dann verwenden um sicher zu gehen daß ich nur FALSE/TRUE geliefert bekomme wenn ich auf Mitgliedschaft auf OU abfrage?

DWWs Vorschlag wird dann gleich im Anschluss ausprobiert. Ich würde natürlich jetzt schon gerne zumindest den WMI-Filter so hinbekommen daß er funktioniert und dann kann ich das andere machen damit es performanter ist und den WMI-Filter dann eben einfach nicht einsetzen.


@dww

Du meinst also ich solle wie folgt vorgehen:
1. Geplanten Task erstellen und einen Trigger einsetzen "Bei Anmeldung"
2. Per GPP verteilen. In der GPP kann ich Zielgruppenadressierung verwenden um nur in die entsprechende Clients der OU zu verteilen

Richtig? Wenn das so ist dann werde ich mich heute/morgen mit dieser Lösung beschäftigen und mal schauen wie weit ich komme. Danke ;)
Member: DerWoWusste
DerWoWusste Mar 01, 2022 at 14:41:34 (UTC)
Goto Top
Richtig
Member: Doskias
Doskias Mar 01, 2022 at 15:08:16 (UTC)
Goto Top
Zitat von @kaineanung:

In der Powershell bekomme ich bei gleicher Abfrage ja eine Zeile zurückgeliefert. Ich hatte eher gehofft eine 0 oder 1 bzw. FALSE oder TRUE zuückgeliefert zu bekommen aber jetzt bin ich mir nicht mehr sicher wie ich diese ganze Zeile intepretieren soll? Ein Array mit einem Element würde ich dann fast sagen...
Genau, 1 Zeile kann auch ein Array sein.

Welche Abfrage sollte ich dann verwenden um sicher zu gehen daß ich nur FALSE/TRUE geliefert bekomme wenn ich auf Mitgliedschaft auf OU abfrage?
Du musst nicht nur false oder true zurückbekommen. Wichtig ist, dass du nur ein Ergebnis zurück bekommst und das kein Array ist. Kommen wir gleich nochmal zu. face-smile

DWWs Vorschlag wird dann gleich im Anschluss ausprobiert.
Nee, probiere es direkt aus. ist besser und einfacher. zeit zum lernen hast du, wenn deine Lösung zuverlässig läuft face-smile

Ich würde natürlich jetzt schon gerne zumindest den WMI-Filter so hinbekommen daß er funktioniert und dann kann ich das andere machen damit es performanter ist und den WMI-Filter dann eben einfach nicht einsetzen.
Da kann ich dir aus dem Kopf jetzt nicht helfen. ist schon ein paar Jahre her, dass ich mit WMI-Filter exzessiven Spass hatte. Derzeit habe ich eine User-GPO (Login Skript), die nur auf Windows 10 und nicht auf Windows 8 Rechnern ausgeführt werden soll. Das sieht so aus:
select * from Win32_OperatingSystem where Version like "10.%" and ProductType="1"  
Auch hier bekomme ich 6 Werte zurück, aber halt kein Array

Ich kann dir jetzt aus dem Kopf nicht sagen was du genau abfrgen musst, aber mit:
https://www.windowspro.de/tool/statt-wmic-pc-konfiguration-mit-kostenlos ... bzw.
https://www.microsoft.com/en-us/download/details.aspx?displaylang=en& ... solltest du es ausfindig machen können.
Ansosnten könntest du mit
 SELECT * FROM Win32_ComputerSystem where name = "PC-Name"   
die Funktion zumindest an einem Rechner schonmal testen. Aber du weißt ja, dass dein Skript generell funktioniert.