Centrum skryptów - Systemy operacyjne

Czy mogę zmienić rejestr, używając transakcji programu Windows PowerShell 2.0?

Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

Witamy w rubryce TechNet, w której Skrypciarze z firmy Microsoft odpowiadają na częste pytania dotyczące używania skryptów w administracji systemu. Jeśli macie jakieś pytania z tej dziedziny, zachęcamy do wysłania e-maila na adres: scripter@microsoft.com. Nie możemy zagwarantować odpowiedzi na każde otrzymane pytanie, ale staramy się jak możemy.

 

Czy mogę zmienić rejestr, używając transakcji programu Windows PowerShell 2.0?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Używam programu Windows PowerShell do pracy z rejestrem od czasu ukazania się wersji Windows PowerShell 1.0. Program Windows PowerShell 2.0 pozwala mi na edytowanie rejestru na komputerze zdalnym. Czy mogę używać transakcji z dostawcą rejestru, by upewnić się, że zmiany w rejestrze nie zostaną utracone przed wprowadzeniem?

-- SK

Cześć Skrypciarze! Odpowiedź

Cześć, SK! Czołem, tutaj skrypciarz Ed Wilson. W Charlotte w Północnej Karolinie zaczęły padać deszcze, które spłukały pozostałości niedawnej śnieżycy. W zimne, deszczowe dni lubię trzymać pod ręką czajnik pełen herbaty. Dzisiaj piję earl greya z trawą cytrynową i laską cynamonu. Pogryzam też ciasteczka owsiane z jabłkami i orzechami, które upiekła Skrypciarska Żona. Dzięki dodatkowi jabłek nie trzeba w nich używać cukru. Chłodna, mokra pogoda przypomina mi o dniu, który spędziłem w Fisherman’s Wharf w San Francisco, gdzie prowadziłem warsztaty poświęcone językowi VBScript. Zrobiłem wtedy to zdjęcie:

Aby używać transakcji w rejestrze, należy najpierw uruchomić transakcję. W tym celu używamy apletu polecenia Start-Transaction, tak jak widać to poniżej:

PS C:\> Start-Transaction



Suggestion [1,Transactions]: Once a transaction is started, only commands that get called with the -UseTransact

become part of that transaction.

PS C:\>

Jest to denerwujące, ale każde uruchomienie transakcji powoduje wyświetlenie komunikatu. Próbowałem przesyłania potokiem do apletu polecenia Out-Null i przekierowywania do $null, ale komunikat jest i tak wyświetlany. Wygląda na to, że nie istnieje parametr umożliwiający jego zablokowanie.

Po uruchomieniu transakcji można za jej pomocą tworzyć nowe klucze rejestru. W celu użycia transakcji należy zastosować w aplecie polecenia parametr –useTransaction. Poniższe polecenie spowoduje utworzenie nowego klucza rejestru po zakończeniu transakcji:

PS C:\> New-Item -Name test2 -Path HKCU:\Software\ScriptingGuys -Value testValue -UseTransaction





    Hive: HKEY_CURRENT_USER\Software\ScriptingGuys





SKC  VC Name                           Property

---  -- ----                           --------

  0   1 test2                          {(default)}

Transakcja nie została jeszcze zakończona, tak więc w rejestrze nie ma nowego klucza. Poniżej widoczne jest potwierdzenie, że klucz nie został jeszcze utworzony.

W celu ukończenia transakcji należy użyć apletu polecenia Complete-Transaction. Następnie można użyć apletu polecenia Get-Item, aby sprawdzić, czy nowy klucz rejestru został utworzony. Widać to poniżej:

PS C:\> Complete-Transaction

PS C:\> Get-Item HKCU:\Software\ScriptingGuys\test2





    Hive: HKEY_CURRENT_USER\Software\ScriptingGuys





SKC  VC Name                           Property

---  -- ----                           --------

  0   1 test2                          {(default)}

Ponieważ pytanie dotyczyło zdalnej obsługi rejestru, przypomnę, że należy zacząć od utworzenia zdalnej sesji programu Windows PowerShell. W tym celu należy użyć apletu polecenia Enter-PSSession i określić nazwę komputera. Widać to poniżej:

PS C:\> Enter-PSSession -ComputerName c2

Następnie należy rozpocząć transakcję, używając apletu polecenia Start-Transaction, a następnie zmienić lokalizację roboczą na dysk z rejestrem. Widać to poniżej:

[c2]: PS C:\> Start-Transaction

[c2]: PS C:\> sl hkcu:

Po przejściu do nowej lokalizacji należy użyć apletu polecenia New-Item do utworzenia nowego klucza rejestru. Należy pamiętać, aby użyć parametru –UseTransaction, ponieważ w przeciwnym razie klucz rejestru zostanie utworzony natychmiast. Widać to poniżej:

[c2]: PS HKCU:\> New-Item ScriptingGuys -UseTransaction





    Hive: HKEY_CURRENT_USER





SKC  VC Name                           Property

---  -- ----                           --------

  0   0 ScriptingGuys                  {}

Aby potwierdzić przyjęcie klucza rejestru i zobaczyć zmianę, która zostanie wprowadzona po zakońćzeniu transakcji, należy użyć apletu polecenia Get-Item z parametrem –UseTransaction. Spowoduje to wyświetlenie wyników po zakończeniu transakcji. Widać to poniżej:

[c2]: PS HKCU:\> Get-Item ScriptingGuys -UseTransaction





    Hive: HKEY_CURRENT_USER





SKC  VC Name                           Property

---  -- ----                           --------

  0   0 ScriptingGuys                  {}

Aby zakończyć transakcję, należy użyć apletu polecenia Complete-Transaction i zamknąć zdalną sesję programu Windows PowerShell. Widać to poniżej:

[c2]: PS HKCU:\> Complete-Transaction

[c2]: PS HKCU:\> exit

PS C:\>

Używając edytora rejestru w komputerze zdalnym (za pośrednictwem pulpitu zdalnego lub technologii Hyper-V), można zobaczyć, że został utworzony klucz rejestru w roju użytkownika zdalnego (w naszym wypadku nwtraders\ed). Na komputerze zdalnym zalogowany jest użytkownik nwtraders\administrator. Oznacza to, że należy przejść do roju HKCU użytkownika nwtraders\ed user. Widać to poniżej.

SK, to już wszystko, co musisz wiedzieć o używaniu transakcji do tworzenia lokalnych i zdalnych kluczy rejestru. Zapraszamy jutro — będziemy omawiać… chwila, właściwie nie wiem, co będziemy omawiać.

Skrypciarze Ed Wilson i Craig Liebendorfer

 Do początku strony Do początku strony

Centrum skryptów - Systemy operacyjne