THEMA
about_Transactions
KURZBESCHREIBUNG
Beschreibt die Verwaltung von Transaktionsvorgängen in Windows
PowerShell.
DETAILBESCHREIBUNG
Transaktionen werden in Windows PowerShell ab Windows PowerShell
2.0 unterstützt. Mit diesem Feature können Sie Transaktionen
starten, die Befehle angeben, die Teil der Transaktion sind,
sowie für eine Transaktion einen Commit ausführen und diese
zurücksetzen.
INFORMATIONEN ZU TRANSAKTIONEN
In Windows PowerShell werden als Transaktion Sätze von einem
oder mehreren Befehlen bezeichnet, die als logische Einheit
verwaltet werden. Eine Transaktion kann abgeschlossen werden
(ein "Commit" wird ausgeführt), um die von der Transaktion
betroffenen Daten zu ändern. Transaktionen können auch
vollständig rückgängig gemacht werden ("zurückgesetzt"), sodass
die betroffenen Daten von der Transaktion nicht geändert werden.
Da die Befehle in einer Transaktion als Einheit verwaltet
werden, wird entweder für alle Befehle ein Commit ausgeführt,
oder alle Befehle werden zurückgesetzt.
Transaktionen werden in der Datenverarbeitung häufig verwendet,
besonders für Datenbankvorgänge und Finanztransaktionen.
Transaktionen werden am häufigsten verwendet, wenn eine Gruppe
von Befehlen im schlimmsten Fall nicht einfach nicht ausgeführt
wird, sondern einige Befehle erfolgreich ausgeführt werden,
während andere fehlschlagen und das System dadurch in einem
beschädigten, falschen oder nicht interpretierbaren Status
hinterlassen wird, der nur mit Schwierigkeiten repariert werden
kann.
TRANSACTION-CMDLETS
Windows PowerShell enthält verschiedene Cmdlets für die
Verwaltung von Transaktionen.
Cmdlet Beschreibung
-------------- ---------------------------------
Start-Transaction Startet eine neue Transaktion.
Use-Transaction Fügt der Transaktion einen
Befehl oder einen Ausdruck hinzu.
Für den Befehl müssen für
Transaktionen aktivierte Objekte
verwendet werden.
Undo-Transaction Setzt die Transaktion zurück,
sodass keine Daten von der
Transaktion geändert werden.
Complete-Transaction Führt einen Commit für die
Transaktion aus. Die von der
Transaktion betroffenen Daten
werden geändert.
Get-Transaction Ruft Informationen zur aktiven
Transaktion ab.
Eine Liste von Transaction-Cmdlets erhalten Sie mit folgendem
Befehl:
get-command *transaction
Ausführliche Informationen zu diesen Cmdlets erhalten Sie mit
folgendem Befehl:
get-help <Cmdlet-Name> -detailed
Beispiel:
get-help use-transaction -detailed
FÜR TRANSAKTIONEN AKTIVIERTE ELEMENTE
Um an einer Transaktion teilnehmen zu können, müssen das Cmdlet
und der Anbieter Transaktionen unterstützen. Dieses Feature ist
in die von der Transaktion betroffenen Objekte integriert.
Der Windows PowerShell-Registrierungsanbieter unterstützt
Transaktionen unter Windows Vista. Das TransactedString-Objekt
(Microsoft.PowerShell.Commands.Management.TransactedString) kann
unter jedem Betriebssystem verwendet werden, in dem Windows
PowerShell ausgeführt wird.
Andere Windows PowerShell-Anbieter können ebenfalls Transaktionen
unterstützen. Wenn Sie die Windows PowerShell-Anbieter in der Sitzung
suchen möchten, die Transaktionen unterstützen, verwenden Sie den
folgenden Befehl, um in der Capabilities-Eigenschaft der Anbieter den
Wert "Transactions" zu suchen:
get-psprovider | where {$_.Capabilities -like "*transactions*"}
Weitere Informationen zu einem Anbieter finden Sie in der Hilfe
für den betreffenden Anbieter.
Wenn Sie Hilfe zu einem Anbieter abrufen möchten, geben Sie
Folgendes ein:
get-help <Anbietername>
Hilfeinformationen zum Registrierungsanbieter können Sie z. B.
mit folgendem Befehl abrufen:
get-help registry
DER USETRANSACTION-PARAMETER
Cmdlets, die Transaktionen unterstützen, verfügen über einen
UseTransaction-Parameter. Mit diesem Parameter wird der Befehl
in der aktiven Transaktion eingeschlossen. Sie können den
vollständigen Namen des Parameters oder aber dessen Alias, "usetx",
verwenden.
Der Parameter kann nur verwendet werden, wenn die Sitzung eine
aktive Transaktion enthält. Wenn Sie einen Befehl mit dem
UseTransaction-Parameter eingeben und keine aktive Transaktion
vorhanden ist, wird für den Befehl ein Fehler ausgegeben.
Wenn Sie Cmdlets mit dem UseTransaction-Parameter suchen
möchten, geben Sie Folgendes ein:
get-help * -parameter UseTransaction
Alle Kern-Cmdlets von Windows PowerShell, die mit Windows
PowerShell-Anbietern verwendet werden können, unterstützen
Transaktionen. Daher können Sie Transaktionen über die
Anbieter-Cmdlets verwalten.
Weitere Informationen zur Windows PowerShell-Anbietern finden
Sie unter "about_Providers".
DAS TRANSACTION-OBJEKT
Transaktionen werden in Windows PowerShell durch ein
Transaktionsobjekt, System.Management.Automation.Transaction,
dargestellt.
Das Objekt verfügt über die folgenden Eigenschaften:
RollbackPreference:
Enthält die Einstellungen für die Zurücksetzung der
aktuellen Transaktion. Die Einstellung für die
Zurücksetzung können Sie festlegen, wenn Sie die
Transaktion mit Start-Transaction starten.
Die Einstellung für die Zurücksetzung bestimmt die
Bedingungen, unter denen die Transaktion automatisch
zurückgesetzt wird. Gültig sind die Werte "Error",
"TerminatingError" und "Never". Der Standardwert ist "Error".
Status:
Enthält den aktuellen Status der Transaktion. Gültig sind
die Werte "Active", "Committed" und "RolledBack".
SubscriberCount:
Enthält die Anzahl der Abonnenten für die Transaktion. Einer
Transaktion wird ein Abonnent hinzugefügt, wenn Sie eine
Transaktion starten, während eine andere Transaktion
ausgeführt wird. Die Abonnentenanzahl wird gesenkt, wenn ein
Abonnent einen Commit für die Transaktion ausführt.
AKTIVE TRANSAKTIONEN
In Windows PowerShell ist jeweils nur eine Transaktion aktiv,
und Sie können nur die aktive Transaktion verwalten. In einer
einzelnen Sitzung können mehrere Transaktionen gleichzeitig
ausgeführt werden, jedoch ist nur die zuletzt gestartete
Transaktion aktiv.
Daher können Sie beim Verwenden der Transaction-Cmdlets keine
bestimmte Transaktion angeben. Befehle werden immer auf die
aktive Transaktion angewendet.
Im Verhalten des Cmdlet "Get-Transaction" wird dies am
offensichtlichsten. Wenn Sie den Befehl "Get-Transaction"
eingeben, ruft Get-Transaction stets nur ein Transaktionsobjekt
ab. Dieses Objekt stellt die aktive Transaktion dar.
Wenn Sie eine andere Transaktion verwalten möchten, müssen Sie
zuerst die aktive Transaktion beenden, indem Sie für diese
einen Commit ausführen oder sie zurücksetzen. In diesem Fall
wird die vorherige Transaktion automatisch aktiv. Transaktionen
werden in der umgekehrten Reihenfolge aktiv, in der sie
gestartet wurden, sodass immer die zuletzt gestartete
Transaktion aktiv ist.
ABONNENTEN AND UNABHÄNGIGE TRANSAKTIONEN
Wenn Sie eine Transaktion starten, während eine andere
Transaktion ausgeführt wird, wird von Windows PowerShell
standardmäßig keine neue Transaktion gestartet. Stattdessen
wird der aktuellen Transaktion ein "Abonnent" hinzugefügt.
Wenn eine Transaktion mehrere Abonnenten umfasst, wird mit dem
einzelnen Befehl "Undo-Transaction" zu beliebigem Zeitpunkt die
gesamte Transaktion für alle Abonnenten zurückgesetzt. Um
jedoch einen Commit für die Transaktion auszuführen, müssen Sie
den Befehl "Complete-Transaction" für jeden Abonnenten eingeben.
Wenn Sie die Anzahl von Abonnenten für eine Transaktion suchen
möchten, überprüfen Sie die SubscriberCount-Eigenschaft des
Transaktionsobjekts. Im folgenden Befehl wird z. B. das Cmdlet
"Get-Transaction" verwendet, um den Wert für die SubscriberCount
-Eigenschaft der aktiven Transaktion abzurufen:
(Get-Transaction).SubscriberCount
Im Standardverhalten wird ein Abonnent hinzugefügt, da sich die
meisten Transaktionen, die gestartet werden, während eine
andere Transaktion ausgeführt wird, auf die ursprüngliche
Transaktion beziehen. In einem typischen Modell wird mit einem
Skript, das eine Transaktion enthält, ein Hilfsskript
aufgerufen, das eine eigene Transaktion enthält. Da die
Transaktionen aufeinander bezogen sind, müssen sie
zurückgesetzt werden, oder muss ein einzelner Commit für alle
ausgeführt werden.
Mit dem Independent-Parameter des Cmdlet "Start-Transaction"
können Sie jedoch eine Transaktion starten, die von der
aktuellen Transaktion unabhängig ist.
Wenn Sie eine unabhängige Transaktion starten, wird mit
Start-Transaction ein neues Transaktionsobjekt erstellt, und
die neue Transaktion wird aktiv. Für die unabhängige
Transaktion kann ein Commit ausgeführt werden, oder sie kann
zurückgesetzt werden, ohne dass die ursprüngliche Transaktion
beeinflusst wird.
Wenn die unabhängige Transaktion beendet wird (durch Commit
oder Zurücksetzen), wird die ursprüngliche Transaktion wieder aktiv.
ÄNDERN VON DATEN
Wenn Sie mit Transaktionen Daten ändern, werden die von der
Transaktion betroffenen Daten erst geändert, wenn Sie für die
Transaktion einen Commit ausgeführt haben.
Dieselben Daten können jedoch von Befehlen geändert werden, die
nicht Teil der Transaktion sind.
Diesen Umstand sollten Sie nicht vergessen, wenn Sie mit
Transaktionen freigegebene Daten verwalten. In der Regel
verfügen Datenbanken über Mechanismen, mit denen die Daten
gesperrt werden, während Sie an diesen arbeiten. Damit wird
verhindert, dass diese von anderen Benutzern und anderen
Befehlen, Skripts und Funktionen geändert werden.
Diese Sperre bildet jedoch ein Feature der Datenbank. Mit den
Transaktionen steht sie in keinem Bezug. Wenn Sie mit einem für
Transaktionen aktivierten Dateisystem oder einem anderem
Datenspeicher arbeiten, können die Daten geändert werden,
während die Transaktion ausgeführt wird.
BEISPIELE
In den Beispielen in diesem Abschnitt wird der Windows PowerShell-
Registrierungsanbieter verwendet, und es wird davon ausgegangen, dass
Sie mit diesem vertraut sind. Wenn Sie Informationen zum
Registrierungsanbieter benötigen, geben Sie "get-help registry" ein.
BEISPIEL 1: AUSFÜHREN EINES COMMITS FÜR EINE TRANSAKTION
Das Cmdlet "Start-Transaction" ermöglicht das Erstellen einer
Transaktion. Mit dem folgenden Befehl starten Sie eine
Transaktion mit den Standardeinstellungen.
start-transaction
Wenn Sie Befehle in die Transaktion einschließen möchten,
verwenden Sie den UseTransaction-Parameter des Cmdlet.
Standardmäßig werden Befehle nicht in die Transaktion eingeschlossen.
Zum Beispiel ist der folgende Befehl, mit dem der aktuellen
Speicherort im Schlüssel "Software" des Laufwerks "HKCU:"
festlegt wird, nicht in die Transaktion eingeschlossen.
cd hkcu:\Software
Im folgenden Befehl zum Erstellen des Schlüssels "MyCompany" wird
mit dem UseTransaction-Parameter des Cmdlet "New-Item" der Befehl
in die aktive Transaktion eingeschlossen.
new-item MyCompany -UseTransaction
Mit dem Befehl wird ein Objekt zurückgegeben, das den neuen
Schlüssel darstellt, doch da der Befehl Teil der Transaktion ist,
wird die Registrierung noch nicht geändert.
Struktur: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
0 0 MyCompany {}
Wenn Sie für die Transaktion einen Commit ausführen möchten,
verwenden Sie das Cmdlet "Complete-Transaction".
Da dieses sich stets auf die aktive Transaktion auswirkt, können
Sie die Transaktion nicht angeben.
complete-transaction
Als Ergebnis wird der Schlüssel "MyCompany" der Registrierung
hinzugefügt.
dir m*
Struktur: HKEY_CURRENT_USER\software
SKC VC Name Property
--- -- ---- --------
83 1 Microsoft {(default)}
0 0 MyCompany {}
BEISPIEL 2: ZURÜCKSETZEN EINER TRANSAKTION
Das Cmdlet "Start-Transaction" ermöglicht das Erstellen einer
Transaktion. Mit dem folgenden Befehl starten Sie eine
Transaktion mit den Standardeinstellungen.
start-transaction
Im folgenden Befehl zum Erstellen des Schlüssels "MyOtherCompany"
wird mit dem UseTransaction-Parameter des Cmdlet "New-Item" der
Befehl in die aktive Transaktion eingeschlossen.
new-item MyOtherCompany -UseTransaction
Mit dem Befehl wird ein Objekt zurückgegeben, das den neuen
Schlüssel darstellt, doch da der Befehl Teil der Transaktion ist,
wird die Registrierung noch nicht geändert.
Struktur: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
0 0 MyOtherCompany {}
Zum Zurücksetzen der Transaktion verwenden Sie das Cmdlet
"Undo-Transaction".
Da dieses sich stets auf die aktive Transaktion auswirkt, geben
Sie die Transaktion nicht an.
Undo-transaction
Im Ergebnis wird der Schlüssel "MyOtherCompany" der Registrierung
nicht hinzugefügt.
dir m*
Struktur: HKEY_CURRENT_USER\software
SKC VC Name Property
--- -- ---- --------
83 1 Microsoft {(default)}
0 0 MyCompany {}
BEISPIEL 3: ANZEIGEN EINER TRANSAKTION IN DER VORSCHAU
In der Regel werden durch die in Transaktionen verwendeten
Befehle Daten geändert. Befehle zum Abrufen von Daten sind in
einer Transaktion jedoch auch nützlich, da die Daten so innerhalb
der Transaktion abgerufen werden. Dies ermöglicht eine Vorschau
der Änderungen, die bei einem Commit für die Transaktion
verursacht werden.
Im folgenden Beispiel wird gezeigt, wie mit dem Befehl
"Get-ChildItem" (Alias: "dir") die Änderungen in einer
Transaktion als Vorschau angezeigt werden.
Mit dem folgenden Befehl wird eine Transaktion gestartet.
start-transaction
Im folgenden Befehl wird der Registrierungsschlüssel "MyKey" mit
dem Cmdlet "New-ItemProperty" dem Schlüssel "MyCompany"
hinzugefügt. In dem Befehl wird mit dem UseTransaction-Parameter
der Befehl in die Transaktion eingeschlossen.
new-itemproperty -path MyCompany -Name MyKey -value 123
-UseTransaction
Der Befehl gibt ein Objekt zurück, das den neuen Registrierungsein
trag darstellt, jedoch wird der Registrierungseintrag nicht geändert.
MyKey
-----
123
Wenn Sie die derzeit in der Registrierung vorhandenen Elemente
abrufen möchten, verwenden Sie den Befehl "Get-ChildItem" ("dir")
ohne den UseTransaction-Parameter. Mit dem folgenden Befehl
werden Elemente abgerufen, die mit "M" beginnen.
dir m*
Das Ergebnis zeigt, dass dem Schlüssel MyCompany noch keine
Einträge hinzugefügt wurden.
Struktur: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
83 1 Microsoft {(default)}
0 0 MyCompany {}
Wenn Sie Auswirkungen eines Commits für die Transaktion in der
Vorschau anzeigen möchten, geben Sie den Befehl "Get-ChildItem"
("dir") mit dem UseTransaction-Parameter ein. Dieser Befehl
bietet innerhalb der Transaktion eine Ansicht der Daten.
dir m* -useTransaction
Das Ergebnis zeigt, dass bei ausgeführtem Commit für die
Transaktion der Schlüssel "MyCompany" dem Schlüssel "MyKey"
hinzugefügt wird.
Struktur: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
83 1 Microsoft {(default)}
0 1 MyCompany {MyKey}
BEISPIEL 4: KOMBINIEREN VON BEFEHLEN, DIE TEIL BZW. NICHT TEIL VON
TRANSAKTIONEN SIND
Sie können während einer Transaktion Befehle eingeben, die nicht
Teil einer Transaktion sind. Die Befehle, die nicht Teil von
Transaktionen sind, wirken sich sofort auf die Daten, auf die
Transaktion jedoch überhaupt nicht aus.
Im folgenden Befehl wird eine Transaktion im Registrierungsschlüss
el "HKCU:\Software" gestartet.
start-transaction
In den nächsten drei Befehlen werden mit dem Cmdlet "New-Item"
Schlüssel zur Registrierung hinzugefügt. Im ersten und dritten
Befehl wird der UseTransaction-Parameter verwendet, um Befehle in
die Transaktion einzuschließen. Im zweiten Befehl ist der
Parameter ausgelassen. Da der zweite Befehl nicht Teil der
Transaktion enthalten ist, wird er sofort wirksam.
new-item MyCompany1 -UseTransaction
new-item MyCompany2
new-item MyCompany3 -UseTransaction
Wenn Sie den aktuellen Status der Registrierung anzeigen möchten,
verwenden Sie den Befehl "Get-ChildItem" ("dir") ohne den
UseTransaction-Parameter. Mit diesem Befehl werden Elemente
abgerufen, die mit "M" beginnen.
dir m*
Das Ergebnis zeigt, dass der Schlüssel "MyCompany2" der
Registrierung hinzugefügt wird, aber die Schlüssel "MyCompany1"
und "MyCompany3", die Teil der Transaktion sind, nicht
hinzugefügt werden.
Struktur: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
83 1 Microsoft {(default)}
0 0 MyCompany2 {}
Der folgende Befehl führt einen Commit für die Transaktion aus.
complete-transaction
Nun werden die Schlüssel, die als Teil der Transaktion
hinzugefügt wurden, in der Registrierung angezeigt.
dir m*
Struktur: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
83 1 Microsoft {(default)}
0 0 MyCompany1 {}
0 0 MyCompany2 {}
0 0 MyCompany3 {}
BEISPIEL 5: VERWENDEN DER AUTOMATISCHEN ZURÜCKSETZUNG
Wenn ein Befehl in einer Transaktion einen Fehler beliebiger Art
generiert, wird die Transaktion automatisch zurückgesetzt.
Dieses Standardverhalten wurde für Skripts entworfen, mit denen
Transaktionen ausgeführt werden. Skripts wurden in der Regel
umfangreich getestet und enthalten eine Fehlerbehandlungslogik,
daher werden keine Fehler erwartet, und die Transaktion sollte
normal beendet werden.
Im ersten Befehl wird eine Transaktion im Registrierungsschlüssel
"HKCU:\Software" gestartet.
start-transaction
Im folgenden Befehl wird der Registrierungsschlüssel "MyCompany"
mit dem Cmdlet "New-Item" der Registrierung hinzugefügt. In dem
Befehl wird mit dem UseTransaction-Parameter (Alias: "usetx") der
Befehl in die Transaktion eingeschlossen.
New-Item MyCompany -UseTX
Da der Schlüssel "MyCompany" bereits in der Registrierung ist,
kommt es zu einem Fehler beim Befehl, und die Transaktion wird
zurückgesetzt.
New-Item: Ein Schlüssel unter diesem Pfad ist bereits Bei
Zeile:1 Zeichen:9 vorhanden
+ new-item <<<< MyCompany -usetx
Mit dem Befehl "Get-Transaction" wird überprüft, ob die
Transaktion zurückgesetzt wurde und SubscriberCount auf 0
festgelegt ist.
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 0 RolledBack
BEISPIEL 6: ÄNDERN DER EINSTELLUNG FÜR DIE ZURÜCKSETZUNG
Wenn die Transaktion stärker fehlertolerant sein soll, können Sie
die Einstellung über den RollbackPreference-Parameter von
Start-Transaction ändern.
Mit dem folgenden Befehl wird eine Transaktion mit der
Zurücksetzungseinstellung "Never" gestartet.
start-transaction -rollbackpreference Never
Wenn bei dem Befehl ein Fehler auftritt, wird in diesem Fall die
Transaktion nicht automatisch zurückgesetzt.
New-Item MyCompany -UseTX
New-Item: Ein Schlüssel unter diesem Pfad ist bereits Bei
Zeile:1 Zeichen:9 vorhanden
+ new-item <<<< MyCompany -usetx
Da die Transaktion noch immer aktiv ist, können Sie den Befehl
als Teil der Transaktion erneut übermitteln.
New-Item MyOtherCompany -UseTX
BEISPIEL 7: VERWENDEN DES CMDLETS "USE-TRANSACTION"
Mit dem Cmdlet "Use-Transaction" können Sie direkt Skripts für
Microsoft .NET Framework-Objekte erstellen, die für Transaktionen
aktiviert sind.
Use-Transaction akzeptiert Skriptblöcke, die nur Befehle und
Ausdrücke enthalten dürfen, die für Transaktionen aktivierte .NET
Framework-Objekte verwenden, z. B. Instanzen der
Microsoft.PowerShell.Commands.Management.TransactedString-Klasse.
Mit dem folgenden Befehl wird eine Transaktion gestartet.
start-transaction
Mit dem folgenden Befehl "New-Object" wird eine Instanz der
TransactedString-Klasse erstellt und in der Variablen "$t"
gespeichert.
$t = New-Object Microsoft.PowerShell.Commands.Management.Tran
sactedString
Im folgenden Befehl wird mit der Append-Methode des
TransactedString-Objekts Text zur Zeichenfolge hinzugefügt. Da
der Befehl nicht Teil der Transaktion ist, wird die Änderung
sofort wirksam.
$t.append("Windows")
Mit dem folgenden Befehl wird die gleiche Append-Methode
verwendet, um Text hinzuzufügen, jedoch wird der Text als Teil
der Transaktion hinzugefügt. Der Befehl wird in geschweifte
Klammern eingeschlossen und als Wert des ScriptBlock-Parameters
von Use-Transaction festgelegt. Der UseTransaction-Parameter
(UseTx) ist erforderlich.
use-transaction {$t.append(" PowerShell")} -usetx
Um den aktuellen Inhalt der in die Transaktion eingefügten
Zeichenfolge in "$t" anzuzeigen, verwenden Sie die ToString-Method
e des TransactedString-Objekts.
$t.tostring()
Die Ausgabe zeigt, dass nur die Änderungen wirksam wurden, die
nicht Teil der Transaktion sind.
Windows
Wenn Sie den aktuellen Inhalt der in die Transaktion eingefügten
Zeichenfolge in "$t" innerhalb der Transaktion anzeigen möchten,
betten Sie den Ausdruck in den Befehl "Use-Transaction" ein.
use-transaction {$s.tostring()} -usetx
Die Ausgabe zeigt die Transaktionsansicht.
Windows PowerShell
Der folgende Befehl führt einen Commit für die Transaktion aus.
complete-transaction
So zeigen Sie die endgültige Zeichenfolge an:
$t.tostring()
Windows PowerShell
BEISPIEL 7: VERWALTEN VON TRANSAKTIONEN MIT MEHREREN ABONNENTEN
Wenn Sie eine Transaktion starten, während eine andere
Transaktion ausgeführt wird, wird von Windows PowerShell
standardmäßig keine zweite Transaktion gestartet. Stattdessen
wird der aktuellen Transaktion ein Abonnent hinzugefügt.
Dieses Beispiel veranschaulicht das Anzeigen und Verwalten einer
Transaktion mit mehreren Abonnenten.
Beginnen Sie, indem Sie eine Transaktion im Schlüssel
"HKCU:\Software" starten.
start-transaction
Mit dem folgenden Befehl rufen Sie mit dem Cmdlet "Get-Transaction
" die aktive Transaktion ab.
get-transaction
Das Ergebnis zeigt das Objekt, das die aktive Transaktion darstellt.
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 1 Active
Mit dem folgenden Befehl fügen Sie den Schlüssel "MyCompany" der
Registrierung hinzu.
In dem Befehl wird mit dem UseTransaction-Parameter der Befehl in
die Transaktion eingeschlossen.
new-item MyCompany -UseTransaction
Der folgende Befehl startet mit dem Befehl "Start-Transaction"
eine Transaktion. Zwar wird dieser Befehl an der Eingabeaufforderu
ng eingegeben, doch tritt dieses Szenario mit höherer
Wahrscheinlichkeit ein, wenn Sie ein Skript mit einer Transaktion
ausführen.
start-transaction
Der Befehl "Get-Transaction" zeigt, dass die Abonnentenanzahl im
Transaktionsobjekt erhöht wurde. Der Wert ist nun 2.
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 2 Active
Im nächsten Befehl wird der Registrierungsschlüssel "MyKey" mit
dem Cmdlet "New-ItemProperty" dem Schlüssel "MyCompany"
hinzugefügt. Mit dem UseTransaction-Parameter wird der Befehl in
die Transaktion eingeschlossen.
new-itemproperty -path MyCompany -name MyKey -UseTransaction
Der Schlüssel "MyCompany" ist in der Registrierung nicht
vorhanden, doch wird dieser Befehl erfolgreich ausgeführt, da die
beiden Befehle Teil derselben Transaktion sind.
Der folgende Befehl führt einen Commit für die Transaktion aus.
Wenn die Transaktion zurückgesetzt wurde, wird die Transaktion
für alle Abonnenten zurückgesetzt.
complete-transaction
Der Befehl "Get-Transaction" zeigt, dass die Abonnentenanzahl im
Transaktionsobjekt 1 ist, aber der Wert von "Status" dennoch auf
"Active" (nicht "Committed") festgelegt ist.
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 1 Active
Wenn Sie den Commit für die Transaktion beenden möchten, geben
Sie den Befehl "Complete-Transaction" ein zweites Mal ein. Wenn
ein Commit für eine Transaktion mit mehreren Abonnenten
ausgeführt werden soll, müssen Sie den Befehl "Complete-Transactio
n" für jeden Start-Transaction-Befehl eingeben.
complete-transaction
Ein weiterer Befehl Get-Transaction zeigt, dass für die
Transaktion ein Commit ausgeführt wurde.
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 0 Committed
BEISPIEL 8: VERWALTEN UNABHÄNGIGER TRANSAKTIONEN
Wenn Sie eine Transaktion starten, während eine andere
Transaktion ausgeführt wird, können Sie die neue Transaktion
mithilfe des Independent-Parameters von Start-Transaction als von
der ursprünglichen Transaktion unabhängig festlegen.
In diesem Fall erstellt Start-Transaction ein neues
Transaktionsobjekt und legt die neue Transaktion als aktiv fest.
Beginnen Sie, indem Sie eine Transaktion im Schlüssel
"HKCU:\Software" starten.
start-transaction
Mit dem folgenden Befehl rufen Sie mit dem Cmdlet "Get-Transaction
" die aktive Transaktion ab.
get-transaction
Das Ergebnis zeigt das Objekt, das die aktive Transaktion darstellt.
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 1 Active
Mit dem folgenden Befehl wird der Registrierungsschlüssel
"MyCompany" als Teil der Transaktion hinzugefügt. Mit dem
UseTransaction-Parameter (UseTx) wird der Befehl in die aktive
Transaktion eingeschlossen.
new-item MyCompany -use
Mit dem folgenden Befehl wird eine neue Transaktion gestartet. Im
Befehl wird mit dem Independent-Parameter angegeben, dass diese
Transaktion kein Abonnent der aktiven Transaktion ist.
start-transaction -independent
Wenn Sie eine unabhängige Transaktion erstellen, wird die neue
(zuletzt erstellte) Transaktion die aktive Transaktion. Mit dem
Befehl "Get-Transaction" können Sie die aktive Transaktion abrufen.
get-transaction
SubscriberCount ist für die Transaktion 1, d. h., es sind keine
weiteren Abonnenten vorhanden, und es handelt sich um eine neue
Transaktion.
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 1 Active
Sie können die ursprüngliche Transaktion erst verwalten, wenn die
neue Transaktion beendet wurde (durch Commit oder Zurücksetzen).
Mit dem folgenden Befehl fügen Sie den Schlüssel "MyOtherCompany"
der Registrierung hinzu.
Mit dem UseTransaction-Parameter (UseTx) wird der Befehl in die
aktive Transaktion eingeschlossen.
new-item MyOtherCompany -usetx
Setzen Sie die Transaktion nun zurück. Bei einer einzelnen
Transaktion mit zwei Abonnenten wird beim Zurücksetzen der
Transaktion die gesamte Transaktion für alle Abonnenten zurückgesetzt.
Da diese Transaktionen jedoch unabhängig sind, werden beim
Zurücksetzen der letzten Transaktion die Änderungen an der
Registrierung verworfen, und die ursprüngliche Transaktion wird aktiv.
undo-transaction
Mit dem Befehl "Get-Transaction" wird überprüft, ob die
ursprüngliche Transaktion in der Sitzung immer noch aktiv ist.
get-transaction
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 1 Active
Der folgende Befehl führt einen Commit für die aktive Transaktion aus.
complete-transaction
Mit dem Befehl Get-ChildItem wird angezeigt, dass die
Registrierung geändert wurde.
dir m*
Struktur: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
83 1 Microsoft {(default)}
0 0 MyCompany {}
SIEHE AUCH
Start-Transaction
Get-Transaction
Complete-Transaction
Undo-Transaction
Use-Transaction
Registrierung (Anbieter)
about_Providers
Get-PSProvider
Get-ChildItem