Bei Benutzeranmeldung Registry-Wert in HKLM setzen
Hallo zusammen,
wir nutzen FSLogix auf Terminal Servern. Wenn ein Benutzer erstmalig angemeldet wird entsteht ein Roaming Profile + eine FSLogix VHDX Profile Disk. Damit das Roaming Profile nicht mehr synchronisiert muss das Profil einmalig auf "local" gesetzt werden, den Rest macht FSLogix. Das versuche ich irgendwie zu automatisieren, da es bald eine Migration mit mehreren neuen Profilen für alle geben wird.
Ich habe einen Registry-Schlüssel ausgemacht der genau das bewirkt was ich möchte:
HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList \ <SID> \ Preferences
UserPreferences REG_DWORD = 0
Solange der Benutzer auf dem RD-SH angemeldet ist, steht hier die Benutzer SID unter HKLM, bei Abmeldung wird die User Registry unmounted und auch der Schlüssel unter HKLM entfällt. Im Benutzer-Kontext dürfte es relativ leicht sein die SID auszulesen, irgendwie etwa so:
wmic useraccount where name="%USERNAME%" get sid
Aber der Benutzer-Kontext darf natürlich keinen Registry Wert in HKLM setzen. Als Administrator darf ich nach HKLM schreiben und den Wert erstellen, kenne aber nicht die SIDs aller angemeldeten, echten Benutzer (kein Administrator, keine Dienst-Accounts, etc.). Außerdem müsste ich als Administrator dann mehrere Registry-Schlüssel setzen, also irgend eine Schleife bauen.
Ich bin leider nicht sonderlich gut mit CMD und Powershell. Außerdem überlege ich natürlich ob ich hier den richten Weg gehe oder vielleicht gibt es eine viel elegantere Methode, z.B. einen Task der bei Benutzeranmeldung getriggert wird und der auch die SID kennt?
wir nutzen FSLogix auf Terminal Servern. Wenn ein Benutzer erstmalig angemeldet wird entsteht ein Roaming Profile + eine FSLogix VHDX Profile Disk. Damit das Roaming Profile nicht mehr synchronisiert muss das Profil einmalig auf "local" gesetzt werden, den Rest macht FSLogix. Das versuche ich irgendwie zu automatisieren, da es bald eine Migration mit mehreren neuen Profilen für alle geben wird.
Ich habe einen Registry-Schlüssel ausgemacht der genau das bewirkt was ich möchte:
HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList \ <SID> \ Preferences
UserPreferences REG_DWORD = 0
Solange der Benutzer auf dem RD-SH angemeldet ist, steht hier die Benutzer SID unter HKLM, bei Abmeldung wird die User Registry unmounted und auch der Schlüssel unter HKLM entfällt. Im Benutzer-Kontext dürfte es relativ leicht sein die SID auszulesen, irgendwie etwa so:
wmic useraccount where name="%USERNAME%" get sid
Aber der Benutzer-Kontext darf natürlich keinen Registry Wert in HKLM setzen. Als Administrator darf ich nach HKLM schreiben und den Wert erstellen, kenne aber nicht die SIDs aller angemeldeten, echten Benutzer (kein Administrator, keine Dienst-Accounts, etc.). Außerdem müsste ich als Administrator dann mehrere Registry-Schlüssel setzen, also irgend eine Schleife bauen.
Ich bin leider nicht sonderlich gut mit CMD und Powershell. Außerdem überlege ich natürlich ob ich hier den richten Weg gehe oder vielleicht gibt es eine viel elegantere Methode, z.B. einen Task der bei Benutzeranmeldung getriggert wird und der auch die SID kennt?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 4010060275
Url: https://administrator.de/contentid/4010060275
Ausgedruckt am: 18.11.2024 um 17:11 Uhr
15 Kommentare
Neuester Kommentar
Als PS-Startskript/elevated bspw.
Cheers
certguy
Get-ChildItem "HKLM:\Software\Microsoft\Windows NT\CurrentVersion\ProfileList\*\Preferences" | %{Set-ItemProperty $_.PSPath -Name UserPreferences -Value 0 -Force}
certguy
Zitat von @ukulele-7:
Das sieht nicht schlecht aus aber wenn ich das richtig sehe sind alle Anmeldungen betroffen, ich müsste aber den Administrator und eigentlich auch einige User ausschließen. Eigentlich alle die nicht in der OU für normale User sind.
Kannst du ja ausfiltern.Das sieht nicht schlecht aus aber wenn ich das richtig sehe sind alle Anmeldungen betroffen, ich müsste aber den Administrator und eigentlich auch einige User ausschließen. Eigentlich alle die nicht in der OU für normale User sind.
Bsp. hier für User aus dem "Users"-Container der Domain
$include = [adsisearcher]::new("LDAP://CN=Users,$(([adsi]'LDAP://rootDSE').defaultNamingContext)",'(ObjectClass=User)','objectSID').FindAll() | %{[System.Security.Principal.SecurityIdentifier]::new($_.Properties['objectSID'],0).Value}
Get-ChildItem "HKLM:\Software\Microsoft\Windows NT\CurrentVersion\ProfileList\*\Preferences" | ?{$_.PSParentPath.split("\")[-1] -in $include} | %{Set-ItemProperty $_.PSPath -Name UserPreferences -Value 1 -Force}