Start-Transaction
Hiermee start u een transactie.
Syntax
Start-Transaction
[-Timeout <Int32>]
[-Independent]
[-RollbackPreference <RollbackSeverity>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Description
Met de Start-Transaction cmdlet wordt een transactie gestart. Dit is een reeks opdrachten die als eenheid worden beheerd. Een transactie kan worden voltooid of doorgevoerd. Het kan ook volledig ongedaan worden gemaakt of teruggedraaid, zodat alle gegevens die door de transactie zijn gewijzigd, worden hersteld naar de oorspronkelijke staat.
Omdat de opdrachten in een transactie worden beheerd als een eenheid, worden alle opdrachten doorgevoerd of worden alle opdrachten teruggedraaid.
Als een opdracht in de transactie standaard een fout genereert, worden transacties automatisch teruggedraaid. U kunt de parameter RollbackPreference gebruiken om dit gedrag te wijzigen.
De cmdlets die in een transactie worden gebruikt, moeten zijn ontworpen om transacties te ondersteunen. Cmdlets die transacties ondersteunen, hebben een UseTransaction-parameter . Als u transacties in een provider wilt uitvoeren, moet de provider transacties ondersteunen. De Windows PowerShell Registerprovider in Windows Vista en latere versies van het Windows-besturingssysteem ondersteunt transacties. U kunt ook de klasse Microsoft.PowerShell.Commands.Management.TransactedString gebruiken om expressies op te nemen in transacties op elke versie van het Windows-systeem die ondersteuning biedt voor Windows PowerShell. Andere Windows PowerShell providers kunnen ook transacties ondersteunen.
Er kan slechts één transactie tegelijk actief zijn. Als u een nieuwe, onafhankelijke transactie start terwijl een transactie wordt uitgevoerd, wordt de nieuwe transactie de actieve transactie en moet u de nieuwe transactie doorvoeren of terugdraaien voordat u wijzigingen aanbrengt in de oorspronkelijke transactie.
Start-Transactioncmdlet is een van een set cmdlets die ondersteuning bieden voor de transactiefunctie in Windows PowerShell. Zie about_Transactions voor meer informatie.
Voorbeelden
Voorbeeld 1: Een transactie starten en terugdraaien
Set-Location hkcu:\software
Start-Transaction
New-Item "ContosoCompany" -UseTransaction
New-ItemProperty "ContosoCompany" -Name "MyKey" -Value 123 -UseTransaction
Undo-Transaction
Deze opdrachten worden gestart en vervolgens een transactie teruggedraaid. Omdat de transactie wordt teruggedraaid, worden er geen wijzigingen aangebracht in het register.
Voorbeeld 2: Een transactie starten en voltooien
Set-Location hkcu:\software
Start-Transaction
New-Item "ContosoCompany" -UseTransaction
New-ItemProperty "ContosoCompany" -Name "MyKey" -Value 123 -UseTransaction
Complete-Transaction
Deze opdrachten worden gestart en vervolgens een transactie voltooid. Er worden geen wijzigingen aangebracht in het register totdat de Complete-Transaction opdracht wordt gebruikt.
Voorbeeld 3: verschillende voorkeuren voor terugdraaien gebruiken
Set-Location HKCU:\software
Start-Transaction
New-Item -Path "NoPath" -Name "ContosoCompany" -UseTransaction
New-Item -Path . -Name "ContosoCompany" -UseTransaction
Start-Transaction -RollbackPreference never
New-Item -Path "NoPath" -Name "ContosoCompany" -UseTransaction
New-Item -Path . -Name "ContosoCompany" -UseTransaction
# Start-Transaction (-rollbackpreference error)
Start-Transaction
New-Item -Path "NoPath" -Name "ContosoCompany" -UseTransaction
New-Item : The registry key at the specified path does not exist.
At line:1 char:9
+ new-item <<<< -Path NoPath -Name ContosoCompany -UseTransaction
New-Item -Path . -Name "Contoso" -UseTransaction
New-Item : Cannot use transaction. The transaction has been rolled back or has timed out.
At line:1 char:9
+ New-Item <<<< -Path . -Name ContosoCompany -UseTransaction
# Start-Transaction (-rollbackpreference never)
Start-Transaction -RollbackPreference never
New-Item -Path "NoPath" -Name "ContosoCompany" -UseTransaction
New-Item : The registry key at the specified path does not exist.
At line:1 char:9
+ New-Item <<<< -Path NoPath -Name "ContosoCompany" -UseTransaction
New-Item -Path . -Name "ContosoCompany" -UseTransaction
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
0 0 ContosoCompany {}
Complete-Transaction
# Succeeds
In dit voorbeeld ziet u het effect van het wijzigen van de parameterwaarde RollbackPreference .
In de eerste set opdrachten Start-Transaction wordt RollbackPreference niet gebruikt. Als gevolg hiervan wordt de standaardwaarde (Fout) gebruikt. Wanneer er een fout optreedt in een transactieopdracht, dat wil gezegd, bestaat het opgegeven pad niet, wordt de transactie automatisch teruggedraaid.
In de tweede set opdrachten wordt Start-TransactionRollbackPreference gebruikt met de waarde Never. Als er een fout optreedt in een transactieopdracht, is de transactie nog steeds actief en kan deze worden voltooid.
Omdat de meeste transacties zonder fouten moeten worden uitgevoerd, heeft de standaardwaarde RollbackPreference meestal de voorkeur.
Voorbeeld 4: Gebruik deze cmdlet terwijl er een transactie wordt uitgevoerd
Set-Location HKCU:\software
Start-Transaction
New-Item "ContosoCompany" -UseTransaction
Start-Transaction
Get-Transaction
New-Item "ContosoCompany2" -UseTransaction
Complete-Transaction
Complete-Transaction
Get-Transaction
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 2 Active
In dit voorbeeld ziet u het effect van het gebruik Start-Transaction terwijl een transactie wordt uitgevoerd.
Het effect is vergelijkbaar met het samenvoegen van de transactie die wordt uitgevoerd.
Hoewel dit een vereenvoudigde opdracht is, treedt dit scenario vaak op wanneer de transactie een script met een volledige transactie omvat.
Met de eerste Start-Transaction opdracht wordt de transactie gestart. De eerste New-Item opdracht maakt deel uit van de transactie.
Met de tweede Start-Transaction opdracht wordt een nieuwe abonnee aan de transactie toegevoegd. De Get-Transaction opdracht retourneert nu een transactie met het aantal abonnees van 2. De tweede New-Item opdracht maakt deel uit van dezelfde transactie.
Er worden geen wijzigingen aangebracht in het register totdat de hele transactie is voltooid. Als u de transactie wilt voltooien, moet u twee Complete-Transaction opdrachten invoeren, één voor elke abonnee. Als u de transactie op enig moment zou terugdraaien, wordt alle transactie teruggedraaid voor beide abonnees.
Voorbeeld 5: Een onafhankelijke transactie starten terwijl er een wordt uitgevoerd
Set-Location HKCU:\software
Start-Transaction
New-Item "ContosoCompany" -UseTransaction
Start-Transaction -Independent
Get-Transaction
Undo-Transaction
New-ItemProperty -Path "ContosoCompany" -Name "MyKey" -Value 123 -UseTransaction
Complete-Transaction
Get-ChildItem contoso*
Get-Transaction
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 1 Active
Undo-Transaction
New-ItemProperty -Path "ContosoCompany" -Name "MyKey" -Value 123 -UseTransaction
MyKey
-----
123
Complete-Transaction
Get-ChildItem contoso*
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
0 1 MyCompany {MyKey}
In dit voorbeeld ziet u het effect van het gebruik van de onafhankelijke parameter voor het starten van Start-Transaction een transactie terwijl een andere transactie wordt uitgevoerd.
In dit geval wordt de nieuwe transactie teruggedraaid zonder dat dit van invloed is op de oorspronkelijke transactie.
Hoewel de transacties logisch onafhankelijk zijn, omdat slechts één transactie tegelijk actief kan zijn, moet u de nieuwste transactie terugdraaien of doorvoeren voordat u de oorspronkelijke transactie hervat.
De eerste set opdrachten start een transactie.
De New-Item opdracht maakt deel uit van de eerste transactie.
In de tweede set opdrachten gebruikt de Start-Transaction opdracht de onafhankelijke parameter.
De Get-Transaction volgende opdracht toont het transactieobject voor de actieve transactie, de nieuwste.
Het aantal abonnees is gelijk aan 1, dat aangeeft dat de transacties niet gerelateerd zijn.
Wanneer de actieve transactie wordt teruggedraaid met behulp van een Undo-Transaction opdracht, wordt de oorspronkelijke transactie opnieuw actief.
De New-ItemProperty opdracht, die deel uitmaakt van de oorspronkelijke transactie, eindigt zonder fouten en de oorspronkelijke transactie kan worden voltooid met behulp van de Complete-Transaction opdracht.
Als gevolg hiervan wordt het register gewijzigd.
Voorbeeld 6: Opdrachten uitvoeren die geen deel uitmaken van een transactie
Set-Location hkcu:\software
Start-Transaction
New-Item "ContosoCompany1" -UseTransaction
New-Item "ContosoCompany2"
New-Item "ContosoCompany3" -UseTransaction
Get-ChildItem contoso*
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
0 0 ContosoCompany2 {}
Complete-Transaction
Get-ChildItem contoso*
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
0 0 ContosoCompany1 {}
0 0 ContosoCompany2 {}
0 0 ContosoCompany3 {}
In dit voorbeeld ziet u dat opdrachten die worden verzonden terwijl een transactie wordt uitgevoerd, kunnen worden opgenomen in de transactie of niet. Alleen opdrachten die gebruikmaken van de parameter UseTransaction maken deel uit van de transactie.
De eerste en derde New-Item opdrachten gebruiken de parameter UseTransaction . Deze opdrachten maken deel uit van de transactie. Omdat de tweede New-Item opdracht de parameter UseTransaction niet gebruikt, maakt deze geen deel uit van de transactie.
De eerste Get-ChildItem opdracht toont het effect. De tweede New-Item opdracht wordt onmiddellijk voltooid, maar de eerste en derde New-Item opdrachten zijn pas van kracht als de transactie is doorgevoerd.
Met Complete-Transaction de opdracht wordt de transactie doorgevoerd. Als gevolg hiervan toont de tweede Get-ChildItem opdracht dat alle nieuwe items worden toegevoegd aan het register.
Voorbeeld 7: Een transactie terugdraaien die niet binnen een opgegeven tijd wordt voltooid
Start-Transaction -Timeout 2
# Wait two minutes...
Get-Transaction
New-Item HKCU:\Software\ContosoCompany -UseTransaction
Start-Transaction -Timeout 2
# Wait two minutes...
Get-Transaction
RollbackPreference SubscriberCount Status
------------------ --------------- -----------
Error 1 RolledBack
New-Item HKCU:\Software\ContosoCompany -UseTransaction
New-Item : Cannot use transaction. The transaction has been rolled back or has timed out.
At line:1 char:9
+ new-item <<<< MyCompany -UseTransaction
Met deze opdracht wordt de time-outparameter gebruikt om Start-Transaction een transactie te starten die binnen twee minuten moet worden voltooid. Als de transactie niet is voltooid wanneer de time-out verloopt, wordt deze automatisch teruggedraaid.
Wanneer de time-out verloopt, ontvangt u geen melding, maar de eigenschap Status van het transactieobject is ingesteld op RolledBack en opdrachten die gebruikmaken van de parameter UseTransaction mislukken.
Parameters
Hiermee wordt u gevraagd om bevestiging voordat u de cmdlet uitvoert.
| Type: | SwitchParameter |
| Aliases: | cf |
| Position: | Named |
| Default value: | False |
| Accept pipeline input: | False |
| Accept wildcard characters: | False |
Geeft aan dat deze cmdlet een transactie start die onafhankelijk is van alle transacties die worden uitgevoerd.
Als u een andere transactie gebruikt Start-Transaction terwijl een andere transactie wordt uitgevoerd, wordt er standaard een nieuwe abonnee toegevoegd aan de transactie die wordt uitgevoerd. Deze parameter heeft alleen effect wanneer er al een transactie wordt uitgevoerd in de sessie.
Als u een transactie gebruikt Start-Transaction terwijl er een transactie wordt uitgevoerd, wordt het bestaande transactieobject opnieuw gebruikt en wordt het aantal abonnees verhoogd. Het effect is vergelijkbaar met het samenvoegen van de oorspronkelijke transactie. Met een Undo-Transaction opdracht wordt de hele transactie teruggedraaid.
Als u de transactie wilt voltooien, moet u een Complete-Transaction opdracht voor elke abonnee invoeren.
Omdat de meeste transacties die tegelijkertijd worden uitgevoerd, gerelateerd zijn, is de standaardwaarde voldoende voor de meeste toepassingen.
Als u de onafhankelijke parameter opgeeft, maakt deze cmdlet een nieuwe transactie die kan worden voltooid of ongedaan kan worden gemaakt zonder dat dit van invloed is op de oorspronkelijke transactie. Omdat er echter slechts één transactie tegelijk actief kan zijn, moet u de nieuwe transactie voltooien of terugdraaien voordat u de oorspronkelijke transactie hervat.
| Type: | SwitchParameter |
| Position: | Named |
| Default value: | None |
| Accept pipeline input: | False |
| Accept wildcard characters: | False |
Hiermee geeft u de voorwaarden op waaronder een transactie automatisch wordt teruggedraaid. De aanvaardbare waarden voor deze parameter zijn:
ErrorDe transactie wordt automatisch teruggedraaid als er een afsluitfout of een niet-afsluitfout optreedt.TerminatingErrorDe transactie wordt automatisch teruggedraaid als er een afsluitfout optreedt.NeverDe transactie wordt nooit automatisch teruggedraaid.
De standaardwaarde is Error.
| Type: | RollbackSeverity |
| Accepted values: | Error, TerminatingError, Never |
| Position: | Named |
| Default value: | None |
| Accept pipeline input: | False |
| Accept wildcard characters: | False |
Hiermee geeft u de maximale tijd, in minuten, dat de transactie actief is. Wanneer de time-out verloopt, wordt de transactie automatisch teruggedraaid.
Er is standaard geen time-out voor transacties die op de opdrachtregel worden gestart. Wanneer transacties worden gestart met een script, is de standaardtime-out 30 minuten.
| Type: | Int32 |
| Aliases: | TimeoutMins |
| Position: | Named |
| Default value: | None |
| Accept pipeline input: | False |
| Accept wildcard characters: | False |
Hiermee wordt weergegeven wat er zou gebeuren als u de cmdlet uitvoert. De cmdlet wordt niet uitgevoerd.
| Type: | SwitchParameter |
| Aliases: | wi |
| Position: | Named |
| Default value: | False |
| Accept pipeline input: | False |
| Accept wildcard characters: | False |
Invoerwaarden
None
U kunt invoer voor deze cmdlet niet doorsluisen.
Uitvoerwaarden
None
Deze cmdlet genereert geen uitvoer.
Verwante koppelingen
Feedback
Feedback verzenden en weergeven voor