Skrypt zasad grupy, aby dodać / zaktualizować klucz rejestru HKCU podczas zamykania

2

Istnieje kilka sposobów dodawania lub aktualizowania klucza w rejestrze HKCU. Istnieje kilka sposobów modyfikacji stacji roboczej za pomocą zasad grupy. Wypróbowałem kilka z nich i mogłem skorzystać z pomocy.

Mam zestaw czterech skryptów cs, które kompiluję do exe za pomocą VBSEditor z Adersoft.

Te skompilowane skrypty działają bardzo dobrze i są szybsze niż uruchamianie skryptu .vbs.

Mam skrypt do uruchamiania, logowania, wylogowywania i zamykania systemu. Obecnie te skrypty uzyskują dostęp do serwera SQL i udziałów plików serwera (tylko logowanie i wylogowywanie), odczytują rejestr lokalny i uruchamiają niektóre polecenia za pośrednictwem obiektu wscript.shell. Wszystko to działa zgodnie z oczekiwaniami, w granicach, które zadania wymagające uprawnień administratora muszą być uruchamiane podczas zamykania / uruchamiania, a zadania wymagające dostępu do sieci (pliki i serwer SQL) muszą być uruchamiane podczas logowania i wylogowywania.

Mój problem występuje podczas próby utworzenia i / lub zmodyfikowania klucza rejestru w HKCU. Mogę dobrze odczytać klucze, a moje skrypty działają, gdy są uruchamiane z sesji logowania administratora, ale nie działają nic, gdy są uruchamiane podczas uruchamiania GPO, zamykania, logowania lub wylogowywania.

Ze względu na brak doświadczenia nie znam większości dziwactw środowiska, w których muszą działać skrypty zasad grupy.

Oto jeden zestaw poleceń, który działa w konsoli, ale kończy się niepowodzeniem w GPO:

set oRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Policies\Explorer"
strValueName = "NoControlPanel"
oRegistry.CreateKey HKEY_CURRENT_USER, strKeyPath
oRegistry.SetDWORDValue HKEY_CURRENT_USER,strKeyPath,strValueName,drtval

A oto alternatywna metoda:

strKeyPath = "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer"
strValueName = "NoControlPanel"
strKP = strKeyPath + "\" + strValueName
o=wshShell.RegWrite(strKP, drtval, "REG_DWORD")

drtval ma wartość 0 lub 1 w zależności od tego, czy włączę, czy wyłączę narzędzia rejestru.

Czy ktoś może zobaczyć, co robię źle?

Szczególną stacją roboczą, na której testuję to, jest XP Pro. Mam około 100 takich szczeniąt do zarządzania przez GPO.

Każda pomoc będzie mile widziana.

Timbo
źródło
1
Dlaczego nie miałbyś użyć GPO do ustawienia tej zasady bezpośrednio, zamiast próbować robić to „ręcznie” ze skryptu? Jeśli chodzi o uruchamianie i zamykanie, skrypty są uruchamiane jako użytkownik systemu, więc profil użytkownika nie jest ładowany; stąd nie ma ula HKCU. Nie jestem pewien, dlaczego nie będziesz mieć do nich dostępu podczas logowania i wylogowywania. Czy możesz podać trochę skryptu do logowania i powiedzieć nam, z jakim błędem nie działają działania w oRegistry?
ᴇcʜιᴇ007
Dzięki Techie007 za komentarz. Zaufaj mi Mam ważne powody, dla których chcę zmodyfikować rejestr ze skryptu. Debugowałem już. Co ważniejsze, mogę odczytać ul HKCU z zamknięcia, więc nie wiem, dlaczego powiedziałbyś, że nie jest dostępny. Rzeczywiście, przeczytałem wartość (do pliku), a następnie wykonałem polecenie, a następnie wykonałem kolejne odczyt do pliku. Drugie czytanie nigdy nie występuje. Podobnie, err.number nie jest ustawiony. Ale działa z konsoli. Wciąż szukam pomocy!
Timbo,
Techie007. Nacisnąłem zakładkę. Komentarz został opublikowany. Dlaczego taki niegrzeczny?
Timbo,
To był sarkazm; ale jeśli nie po prostu zostawiłem go jak jest, byś był o osobie 1.000.000 aby nie odpowiedzieć na wszystkie pytania / sugestie, jakie dla nich w komentarzu z prośbą o wyjaśnienia; niestety jest to całkiem zwyczajne. :)
Ƭᴇcʜιᴇ007
Czy możesz podać jakiś wgląd? Mam ponad 1000 skryptów liniowych gotowych do wdrożenia, jeśli mogę to uruchomić.
Timbo

Odpowiedzi:

0

Po wielu testach oraz próbach i błędach nauczyłem się:

Czasami zdarza się, że klucz rejestru, który jest zwykle tworzony w HKCU, można również utworzyć w HKLM.

Wszystkie przykłady, które znalazłem w Google, wskazują na modyfikację klucza HKCU dla tego klucza.

Działa to w bieżącej sesji, w regedit lub za pomocą skryptów, a po ponownym uruchomieniu następuje zmiana.

Ale użycie tego skryptu w skrypcie zamykania zasad grupy nie powiedzie się.

Chwytając się słomek, zmieniłem ul w skrypcie polecenia GPO na HKLM i voila .. To działa.

Nie wiem dokładnie, dlaczego być może „superużytkownik” mógłby to nam wyjaśnić, ale nigdy nie znalazłem tego w taki sposób udokumentowany i mam nadzieję, że pomoże to komuś innemu uniknąć kilku dni ciągnięcia włosów.

Poprawiono do użycia w skrypcie zamykania zasad grupy:

set oRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Policies\Explorer"
strValueName = "NoControlPanel"
oRegistry.CreateKey HKEY_LOCAL_MACHINE, strKeyPath
oRegistry.SetDWORDValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,drtval
Timbo
źródło