Start-Transaction
Démarre une transaction.
Syntaxe
Start-Transaction
[-Timeout <Int32>]
[-Independent]
[-RollbackPreference <RollbackSeverity>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Description
L’applet Start-Transaction
de commande démarre une transaction, qui est une série de commandes gérées en tant qu’unité. Une transaction peut être terminée ou validée. Il peut également être entièrement annulé ou restauré afin que toutes les données modifiées par la transaction soient restaurées à son état d’origine.
Comme les commandes figurant dans une transaction sont gérées en bloc, toutes les commandes sont soit validées soit restaurées.
Par défaut, si une commande de la transaction génère une erreur, les transactions sont restaurées automatiquement. Vous pouvez utiliser le paramètre RollbackPreference pour modifier ce comportement.
Les applets de commande utilisées dans une transaction doivent être conçues pour prendre en charge les transactions. Les applets de commande qui prennent en charge les transactions ont un paramètre UseTransaction . Pour exécuter des transactions dans un fournisseur, le fournisseur doit prendre en charge les transactions. Le fournisseur de Registre Windows PowerShell dans Windows Vista et les versions ultérieures du système d’exploitation Windows prend en charge les transactions. Vous pouvez également utiliser la classe Microsoft.PowerShell.Commands.Management.TransactedString pour inclure des expressions dans des transactions sur n’importe quelle version du système Windows qui prend en charge Windows PowerShell. D’autres fournisseurs Windows PowerShell peuvent également prendre en charge les transactions.
Une seule transaction peut être active à la fois. Si vous démarrez une nouvelle transaction indépendante pendant qu’une transaction est en cours, la nouvelle transaction devient la transaction active et vous devez valider ou restaurer la nouvelle transaction avant d’apporter des modifications à la transaction d’origine.
Start-Transaction
l’applet de commande est l’un des ensembles d’applets de commande qui prennent en charge la fonctionnalité de transactions dans Windows PowerShell. Pour plus d’informations, consultez about_Transactions.
Exemples
Exemple 1 : Démarrer et restaurer une transaction
Set-Location hkcu:\software
Start-Transaction
New-Item "ContosoCompany" -UseTransaction
New-ItemProperty "ContosoCompany" -Name "MyKey" -Value 123 -UseTransaction
Undo-Transaction
Ces commandes démarrent une transaction, puis la restaurent. Comme la transaction est restaurée, aucune modification n’est apportée au Registre.
Exemple 2 : Démarrer et terminer une transaction
Set-Location hkcu:\software
Start-Transaction
New-Item "ContosoCompany" -UseTransaction
New-ItemProperty "ContosoCompany" -Name "MyKey" -Value 123 -UseTransaction
Complete-Transaction
Ces commandes démarrent une transaction, puis l’exécutent. Aucune modification n’est apportée au Registre tant que la Complete-Transaction
commande n’est pas utilisée.
Exemple 3 : Utiliser différentes préférences de restauration
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
Cet exemple illustre l’effet de la modification de la valeur du paramètre RollbackPreference .
Dans le premier jeu de commandes, Start-Transaction
n’utilise pas RollbackPreference. Par conséquent, la valeur par défaut (Erreur) est utilisée. Lorsqu’une erreur se produit dans une commande de transaction, autrement dit, le chemin spécifié n’existe pas, la transaction est automatiquement restaurée.
Dans le deuxième jeu de commandes, Start-Transaction
utilise RollbackPreference avec la valeur Never. Lorsqu’une erreur se produit dans une commande de transaction, la transaction est par conséquent encore active et peut être exécutée.
Étant donné que la plupart des transactions doivent être effectuées sans erreur, la valeur par défaut de RollbackPreference est généralement préférée.
Exemple 4 : Utiliser cette applet de commande pendant qu’une transaction est en cours
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
Cet exemple montre l’effet de l’utilisation Start-Transaction
pendant qu’une transaction est en cours.
L’effet est similaire à la jonction de la transaction en cours.
Bien qu’il s’agit d’une commande simplifiée, ce scénario se produit fréquemment lorsque la transaction implique l’exécution d’un script qui inclut une transaction complète.
La première Start-Transaction
commande démarre la transaction. La première New-Item
commande fait partie de la transaction.
La deuxième Start-Transaction
commande ajoute un nouvel abonné à la transaction. La Get-Transaction
commande retourne maintenant une transaction avec un nombre d’abonnés de 2. La deuxième New-Item
commande fait partie de la même transaction.
Aucune modification n’est apportée au Registre tant que l’intégralité de la transaction n’est pas terminée. Pour terminer la transaction, vous devez entrer deux Complete-Transaction
commandes, une pour chaque abonné. Si vous deviez restaurer la transaction à tout moment, toutes les transactions seraient restaurées pour les deux abonnés.
Exemple 5 : Démarrer une transaction indépendante alors qu’une transaction est en cours
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}
Cet exemple montre l’effet de l’utilisation du paramètre Indépendant pour Start-Transaction
démarrer une transaction alors qu’une autre transaction est en cours.
Dans ce cas, la nouvelle transaction est restaurée sans affecter la transaction d’origine.
Même si les transactions sont logiquement indépendantes, comme une seule transaction peut être active à la fois, vous devez restaurer ou valider la transaction la plus récente avant de reprendre le travail sur la transaction d’origine.
Le premier jeu de commandes démarre une transaction.
La New-Item
commande fait partie de la première transaction.
Dans le deuxième jeu de commandes, la Start-Transaction
commande utilise le paramètre Independent .
La Get-Transaction
commande suivante montre l’objet de transaction pour la transaction active, qui est la plus récente.
Le nombre d’abonnés est égal à 1, ce qui indique que les transactions ne sont pas liées.
Lorsque la transaction active est restaurée à l’aide d’une Undo-Transaction
commande, la transaction d’origine redevient active.
La New-ItemProperty
commande, qui fait partie de la transaction d’origine, se termine sans erreur et la transaction d’origine peut être effectuée à l’aide de la Complete-Transaction
commande.
Le Registre est par conséquent modifié.
Exemple 6 : Exécuter des commandes qui ne font pas partie d’une transaction
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 {}
Cet exemple montre que les commandes qui sont envoyées pendant qu’une transaction est en cours peuvent être incluses ou non dans la transaction. Seules les commandes qui utilisent le paramètre UseTransaction font partie de la transaction.
Les premières et troisième New-Item
commandes utilisent le paramètre UseTransaction . Ces commandes font partie de la transaction. Étant donné que la deuxième New-Item
commande n’utilise pas le paramètre UseTransaction , elle ne fait pas partie de la transaction.
La première commande Get-ChildItem affiche l’effet. La deuxième New-Item
commande est terminée immédiatement, mais les premières et troisième New-Item
commandes ne sont pas effectives tant que la transaction n’est pas validée.
La Complete-Transaction
commande valide la transaction. Par conséquent, la deuxième commande Get-ChildItem montre que tous les nouveaux éléments sont ajoutés au Registre.
Exemple 7 : Restaurer une transaction qui ne se termine pas dans un délai spécifié
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
Cette commande utilise le paramètre Timeout pour Start-Transaction
démarrer une transaction qui doit être effectuée dans les deux minutes. Si la transaction n’est pas terminée lorsque le délai d’expiration expire, il est restauré automatiquement.
Lorsque le délai d’expiration expire, vous n’êtes pas averti, mais la propriété Status de l’objet transactionnel est définie sur RolledBack et les commandes qui utilisent le paramètre UseTransaction échouent.
Paramètres
-Confirm
Vous demande une confirmation avant d’exécuter l’applet de commande.
Type: | SwitchParameter |
Alias: | cf |
Position: | Named |
Valeur par défaut: | False |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | False |
-Independent
Indique que cette applet de commande démarre une transaction indépendante de toutes les transactions en cours.
Par défaut, si vous utilisez Start-Transaction
une autre transaction en cours, un nouvel abonné est ajouté à la transaction en cours. Ce paramètre prend uniquement effet lorsqu’une transaction est déjà en cours dans la session.
Par défaut, si vous utilisez Start-Transaction
pendant qu’une transaction est en cours, l’objet transactionnel existant est réutilisé et le nombre d’abonnés est incrémenté. L’effet est similaire à la jonction de la transaction d’origine. Une Undo-Transaction
commande restaure l’intégralité de la transaction.
Pour terminer la transaction, vous devez entrer une Complete-Transaction
commande pour chaque abonné.
Comme la plupart des transactions qui sont simultanément en cours sont liées, la valeur par défaut est suffisante dans la majorité des cas.
Si vous spécifiez le paramètre Independent , cette applet de commande crée une transaction qui peut être terminée ou annulée sans affecter la transaction d’origine. Comme une seule transaction peut être active à la fois, vous devez toutefois exécuter ou restaurer la nouvelle transaction avant de reprendre le travail sur la transaction d’origine.
Type: | SwitchParameter |
Position: | Named |
Valeur par défaut: | None |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | False |
-RollbackPreference
Spécifie les conditions dans lesquelles une transaction est automatiquement restaurée. Les valeurs valides pour ce paramètre sont :
Error
La transaction est restaurée automatiquement si une erreur de fin ou de non-fin se produit.TerminatingError
La transaction est restaurée automatiquement si une erreur de fin se produit.Never
La transaction n’est jamais restaurée automatiquement.
La valeur par défaut est Error
.
Type: | RollbackSeverity |
Valeurs acceptées: | Error, TerminatingError, Never |
Position: | Named |
Valeur par défaut: | None |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | False |
-Timeout
Spécifie la durée maximale d’activité de la transaction (en minutes). Lorsque le délai d’attente expire, la transaction est automatiquement restaurée.
Par défaut, aucun délai d’attente n’est défini pour les transactions qui sont démarrées au niveau de la ligne de commande. Lorsque les transactions sont démarrées par un script, le délai d’attente par défaut est de 30 minutes.
Type: | Int32 |
Alias: | TimeoutMins |
Position: | Named |
Valeur par défaut: | None |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | False |
-WhatIf
Montre ce qui se passe en cas d’exécution de l’applet de commande. L’applet de commande n’est pas exécutée.
Type: | SwitchParameter |
Alias: | wi |
Position: | Named |
Valeur par défaut: | False |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | False |
Entrées
None
Vous ne pouvez pas diriger d'entrée vers cette applet de commande.
Sorties
None
Cette applet de commande ne génère aucune sortie.