다음을 통해 공유


about_Transactions

간단한 설명

PowerShell에서 거래된 작업을 관리하는 방법을 설명합니다.

자세한 설명

트랜잭션은 PowerShell 2.0부터 PowerShell에서 지원됩니다. 이 기능을 사용하면 트랜잭션을 시작하고, 트랜잭션의 일부인 명령을 나타내고, 트랜잭션을 커밋하거나 롤백할 수 있습니다.

트랜잭션 정보

PowerShell에서 트랜잭션은 논리 단위로 관리되는 하나 이상의 명령 집합입니다. 트랜잭션의 영향을 받는 데이터를 변경하는 트랜잭션을 완료("커밋")할 수 있습니다. 또는 트랜잭션에서 영향을 받는 데이터가 변경되지 않도록 트랜잭션을 완전히 취소("롤백")할 수 있습니다.

트랜잭션의 명령은 하나의 단위로 관리되므로 모든 명령이 커밋되거나 모든 명령이 롤백됩니다.

트랜잭션은 데이터 처리, 특히 데이터베이스 작업 및 재무 트랜잭션에 널리 사용됩니다. 트랜잭션은 명령 집합에 대한 최악의 시나리오가 모두 실패하는 것이 아니라 일부 명령이 실패하는 동안 성공하여 시스템을 복구하기 어려운 손상, 거짓 또는 해석할 수 없는 상태로 남겨 두는 경우에 가장 자주 사용됩니다.

TRANSACTION CMDLET

PowerShell에는 트랜잭션 관리를 위해 설계된 여러 cmdlet이 포함되어 있습니다.

  • Start-Transaction: 새 트랜잭션을 시작합니다.
  • Use-Transaction: 트랜잭션에 명령 또는 식을 추가합니다. 이 명령은 트랜잭션 사용 개체를 사용해야 합니다.
  • 실행 취소-트랜잭션: 트랜잭션에 의해 변경된 데이터가 없도록 트랜잭션을 롤백합니다.
  • 전체 트랜잭션: 트랜잭션을 커밋합니다. 트랜잭션의 영향을 받는 데이터가 변경됩니다.
  • Get-Transaction: 활성 트랜잭션에 대한 정보를 가져옵니다.

트랜잭션 cmdlet 목록의 경우 다음을 입력합니다.

get-command *transaction

cmdlet에 대한 자세한 내용은 다음을 입력합니다.

get-help use-transaction -detailed

트랜잭션 사용 요소

트랜잭션에 참여하려면 cmdlet과 공급자 모두 트랜잭션을 지원해야 합니다. 이 기능은 트랜잭션의 영향을 받는 개체에 기본 제공됩니다.

PowerShell 레지스트리 공급자는 Windows Vista에서 트랜잭션을 지원합니다. TransactedString 개체(Microsoft.PowerShell.Commands.Management.TransactedString)는 PowerShell을 실행하는 모든 운영 체제에서 작동합니다.

다른 PowerShell 공급자는 트랜잭션을 지원할 수 있습니다. 세션에서 트랜잭션을 지원하는 PowerShell 공급자를 찾으려면 다음 명령을 사용하여 공급자의 Capabilities 속성에서 "트랜잭션" 값을 찾습니다.

get-psprovider | where {$_.Capabilities -like "*transactions*"}

공급자에 대한 자세한 내용은 공급자에 대한 도움말을 참조하세요. 공급자 도움말을 얻으려면 다음을 입력합니다.

get-help <provider-name>

예를 들어 레지스트리 공급자에 대한 도움말을 보려면 다음을 입력합니다.

get-help registry

USETRANSACTION 매개 변수

트랜잭션을 지원할 수 있는 Cmdlet에는 UseTransaction 매개 변수가 있습니다. 이 매개 변수에는 활성 트랜잭션의 명령이 포함됩니다. 전체 매개 변수 이름 또는 해당 별칭인 "usetx"를 사용할 수 있습니다.

이 매개 변수는 세션에 활성 트랜잭션이 포함된 경우에만 사용할 수 있습니다. 활성 트랜잭션이 없을 때 UseTransaction 매개 변수를 사용하여 명령을 입력하면 명령이 실패합니다.

UseTransaction 매개 변수가 있는 cmdlet을 찾으려면 다음을 입력합니다.

get-help * -parameter UseTransaction

PowerShell 코어에서 PowerShell 공급자와 함께 작동하도록 설계된 모든 cmdlet은 트랜잭션을 지원합니다. 따라서 공급자 cmdlet을 사용하여 트랜잭션을 관리할 수 있습니다.

PowerShell 공급자에 대한 자세한 내용은 about_Providers 참조하세요.

TRANSACTION 개체

트랜잭션은 PowerShell에서 트랜잭션 개체인 System.Management.Automation.Transaction으로 표시됩니다.

개체의 속성은 다음과 같습니다.

  • RollbackPreference: 현재 트랜잭션에 대한 롤백 기본 설정 집합을 포함합니다. Start-Transaction을 사용하여 트랜잭션을 시작할 때 롤백 기본 설정을 지정할 수 있습니다.

    롤백 기본 설정은 트랜잭션이 자동으로 롤백되는 조건을 결정합니다. 유효한 값은 Error, TerminatingError 및 Never입니다. 기본값은 Error입니다.

  • 상태: 트랜잭션의 현재 상태 포함합니다. 유효한 값은 Active, Committed 및 RolledBack입니다.

  • SubscriberCount: 트랜잭션에 대한 구독자 수를 포함합니다. 다른 트랜잭션이 진행 중인 동안 트랜잭션을 시작할 때 구독자가 트랜잭션에 추가됩니다. 구독자가 트랜잭션을 커밋하면 구독자 수가 감소합니다.

활성 트랜잭션

PowerShell에서는 한 번에 하나의 트랜잭션만 활성화되며 활성 트랜잭션만 관리할 수 있습니다. 동일한 세션에서 동시에 여러 트랜잭션이 진행 중일 수 있지만 가장 최근에 시작된 트랜잭션만 활성화되어 있습니다.

따라서 트랜잭션 cmdlet을 사용할 때는 특정 트랜잭션을 지정할 수 없습니다. 명령은 항상 활성 트랜잭션에 적용됩니다.

이는 Get-Transaction cmdlet의 동작에서 가장 분명하게 드러납니다. Get-Transaction 명령을 입력하면 Get-Transaction은 항상 하나의 트랜잭션 개체만 가져옵니다. 이 개체는 활성 트랜잭션을 나타내는 개체입니다.

다른 트랜잭션을 관리하려면 먼저 활성 트랜잭션을 커밋하거나 롤백하여 완료해야 합니다. 이렇게 하면 이전 트랜잭션이 자동으로 활성화됩니다. 트랜잭션은 시작된 순서와 반대로 활성화되므로 가장 최근에 시작된 트랜잭션은 항상 활성화됩니다.

구독자 및 독립 트랜잭션

다른 트랜잭션이 진행 중인 동안 트랜잭션을 시작하는 경우 기본적으로 PowerShell은 새 트랜잭션을 시작하지 않습니다. 대신 현재 트랜잭션에 "구독자"를 추가합니다.

트랜잭션에 여러 구독자가 있는 경우 언제든지 단일 실행 취소-트랜잭션 명령이 모든 구독자에 대한 전체 트랜잭션을 롤백합니다. 그러나 트랜잭션을 커밋하려면 모든 구독자에 대해 Complete-Transaction 명령을 입력해야 합니다.

트랜잭션에 대한 구독자 수를 찾으려면 트랜잭션 개체의 SubscriberCount 속성을 검사. 예를 들어 다음 명령은 Get-Transaction cmdlet을 사용하여 활성 트랜잭션의 SubscriberCount 속성 값을 가져옵니다.

(Get-Transaction).SubscriberCount

다른 트랜잭션이 진행 중인 동안 시작된 대부분의 트랜잭션은 원래 트랜잭션과 관련이 있으므로 구독자를 추가하는 것이 기본 동작입니다. 일반적인 모델에서 트랜잭션을 포함하는 스크립트는 자체 트랜잭션을 포함하는 도우미 스크립트를 호출합니다. 트랜잭션은 관련되어 있으므로 롤백하거나 단위로 커밋해야 합니다.

그러나 Start-Transaction cmdlet의 Independent 매개 변수를 사용하여 현재 트랜잭션과 독립적인 트랜잭션을 시작할 수 있습니다.

독립 트랜잭션을 시작하면 Start-Transaction은 새 트랜잭션 개체를 만들고 새 트랜잭션은 활성 트랜잭션이 됩니다. 독립 트랜잭션은 원래 트랜잭션에 영향을 주지 않고 커밋하거나 롤백할 수 있습니다.

독립 트랜잭션이 완료되면(커밋 또는 롤백) 원래 트랜잭션이 다시 활성 트랜잭션이 됩니다.

데이터 변경

트랜잭션을 사용하여 데이터를 변경하는 경우 트랜잭션을 커밋할 때까지 트랜잭션의 영향을 받는 데이터는 변경되지 않습니다. 그러나 트랜잭션의 일부가 아닌 명령에 의해 동일한 데이터를 변경할 수 있습니다.

트랜잭션을 사용하여 공유 데이터를 관리할 때는 이 점을 염두에 두어야 합니다. 일반적으로 데이터베이스에는 작업하는 동안 데이터를 잠그는 메커니즘이 있어 다른 사용자와 다른 명령, 스크립트 및 함수가 데이터를 변경하지 못하게 합니다.

그러나 잠금은 데이터베이스의 기능입니다. 트랜잭션과 관련이 없습니다. 트랜잭션 사용 파일 시스템 또는 다른 데이터 저장소에서 작업하는 경우 트랜잭션이 진행되는 동안 데이터를 변경할 수 있습니다.

예제

이 섹션의 예제에서는 PowerShell 레지스트리 공급자를 사용하며 잘 알고 있다고 가정합니다. 레지스트리 공급자에 대한 자세한 내용은 "get-help 레지스트리"를 입력합니다.

예제 1: 트랜잭션 커밋

트랜잭션을 만들려면 Start-Transaction cmdlet을 사용합니다. 다음 명령은 기본 설정으로 트랜잭션을 시작합니다.

start-transaction

트랜잭션에 명령을 포함하려면 cmdlet의 UseTransaction 매개 변수를 사용합니다. 기본적으로 명령은 트랜잭션에 포함되지 않습니다.

예를 들어 HKCU: 드라이브의 소프트웨어 키에서 현재 위치를 설정하는 다음 명령은 트랜잭션에 포함되지 않습니다.

cd hkcu:\Software

MyCompany 키를 만드는 다음 명령은 새 항목 cmdlet의 UseTransaction 매개 변수를 사용하여 활성 트랜잭션에 명령을 포함합니다.

new-item MyCompany -UseTransaction

이 명령은 새 키를 나타내는 개체를 반환하지만 명령이 트랜잭션의 일부이므로 레지스트리는 아직 변경되지 않습니다.

Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
  0   0 MyCompany                      {}

트랜잭션을 커밋하려면 Complete-Transaction cmdlet을 사용합니다. 항상 활성 트랜잭션에 영향을 주므로 트랜잭션을 지정할 수 없습니다.

complete-transaction

따라서 MyCompany 키가 레지스트리에 추가됩니다.

dir m*
Hive: HKEY_CURRENT_USER\software

SKC  VC Name                           Property
---  -- ----                           --------
 83   1 Microsoft                      {(default)}
  0   0 MyCompany                      {}

예제 2: 트랜잭션 롤백

트랜잭션을 만들려면 Start-Transaction cmdlet을 사용합니다. 다음 명령은 기본 설정으로 트랜잭션을 시작합니다.

start-transaction

MyOtherCompany 키를 만드는 다음 명령은 New-Item cmdlet의 UseTransaction 매개 변수를 사용하여 활성 트랜잭션에 명령을 포함합니다.

new-item MyOtherCompany -UseTransaction

이 명령은 새 키를 나타내는 개체를 반환하지만 명령이 트랜잭션의 일부이므로 레지스트리는 아직 변경되지 않습니다.

Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
  0   0 MyOtherCompany                 {}

트랜잭션을 롤백하려면 실행 취소-트랜잭션 cmdlet을 사용합니다. 항상 활성 트랜잭션에 영향을 주므로 트랜잭션을 지정하지 않습니다.

Undo-transaction

그 결과 MyOtherCompany 키가 레지스트리에 추가되지 않습니다.

dir m*
Hive: HKEY_CURRENT_USER\software

SKC  VC Name                           Property
---  -- ----                           --------
 83   1 Microsoft                      {(default)}
  0   0 MyCompany                      {}

예제 3: 트랜잭션 미리 보기

일반적으로 트랜잭션에 사용되는 명령은 데이터를 변경합니다. 그러나 데이터를 가져오는 명령은 트랜잭션 내에서 데이터를 가져오기 때문에 트랜잭션에서도 유용합니다. 이렇게 하면 트랜잭션을 커밋하면 발생하는 변경 내용의 미리 보기가 제공됩니다.

다음 예제에서는 Get-ChildItem 명령(별칭은 "dir")을 사용하여 트랜잭션의 변경 내용을 미리 보는 방법을 보여 줍니다.

다음 명령은 트랜잭션을 시작합니다.

start-transaction

다음 명령은 New-ItemProperty cmdlet을 사용하여 MyKey 레지스트리 항목을 MyCompany 키에 추가합니다. 이 명령은 UseTransaction 매개 변수를 사용하여 트랜잭션에 명령을 포함합니다.

new-itemproperty -path MyCompany -Name MyKey -value 123 -UseTransaction

이 명령은 새 레지스트리 항목을 나타내는 개체를 반환하지만 레지스트리 항목은 변경되지 않습니다.

MyKey
-----
123

현재 레지스트리에 있는 항목을 가져오려면 UseTransaction 매개 변수 없이 Get-ChildItem 명령("dir")을 사용합니다. 다음 명령은 "M"으로 시작하는 항목을 가져옵니다.

dir m*

결과에는 MyCompany 키에 아직 추가된 항목이 없음이 표시됩니다.

Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
 83   1 Microsoft                      {(default)}
  0   0 MyCompany                      {}

트랜잭션 커밋 효과를 미리 보려면 UseTransaction 매개 변수를 사용하여 Get-ChildItem("dir") 명령을 입력합니다. 이 명령은 트랜잭션 내에서 데이터를 볼 수 있습니다.

dir m* -useTransaction

그 결과 트랜잭션이 커밋되면 MyKey 항목이 MyCompany 키에 추가됩니다.

Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
 83   1 Microsoft                      {(default)}
  0   1 MyCompany                      {MyKey}

예제 4: 트랜잭션 명령과 트랜잭션되지 않은 명령 결합

트랜잭션 중에 트랜잭션되지 않은 명령을 입력할 수 있습니다. 트랜잭션되지 않은 명령은 데이터에 즉시 영향을 주지만 트랜잭션에는 영향을 미치지 않습니다. 다음 명령은 HKCU:\Software 레지스트리 키에서 트랜잭션을 시작합니다.

start-transaction

다음 세 명령은 New-Item cmdlet을 사용하여 레지스트리에 키를 추가합니다. 첫 번째 및 세 번째 명령은 UseTransaction 매개 변수를 사용하여 트랜잭션에 명령을 포함합니다. 두 번째 명령은 매개 변수를 생략합니다. 두 번째 명령은 트랜잭션에 포함되지 않으므로 즉시 적용됩니다.

new-item MyCompany1 -UseTransaction
new-item MyCompany2
new-item MyCompany3 -UseTransaction

레지스트리의 현재 상태를 보려면 UseTransaction 매개 변수 없이 Get-ChildItem("dir") 명령을 사용합니다. 이 명령은 "M"으로 시작하는 항목을 가져옵니다.

dir m*

결과에는 MyCompany2 키가 레지스트리에 추가되었지만 트랜잭션의 일부인 MyCompany1 및 MyCompany3 키는 추가되지 않습니다.

Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
 83   1 Microsoft                      {(default)}
  0    0 MyCompany2                     {}

다음 명령은 트랜잭션을 커밋합니다.

complete-transaction

이제 트랜잭션의 일부로 추가된 키가 레지스트리에 표시됩니다.

dir m*
Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
83   1 Microsoft                      {(default)}
0    0 MyCompany1                     {}
0    0 MyCompany2                     {}
0    0 MyCompany3                     {}

예제 5: 자동 롤백 사용

트랜잭션의 명령에서 모든 종류의 오류를 생성하면 트랜잭션이 자동으로 롤백됩니다.

이 기본 동작은 트랜잭션을 실행하는 스크립트용으로 설계되었습니다. 스크립트는 일반적으로 잘 테스트되고 오류 처리 논리를 포함하므로 오류가 예상되지 않으며 트랜잭션을 종료해야 합니다.

첫 번째 명령은 HKCU:\Software 레지스트리 키에서 트랜잭션을 시작합니다.

start-transaction

다음 명령은 New-Item cmdlet을 사용하여 MyCompany 키를 레지스트리에 추가합니다. 이 명령은 UseTransaction 매개 변수(별칭은 "usetx")를 사용하여 트랜잭션에 명령을 포함합니다.

New-Item MyCompany -UseTX

MyCompany 키가 레지스트리에 이미 있으므로 명령이 실패하고 트랜잭션이 롤백됩니다.

New-Item : A key at this path already exists
At line:1 char:9
+ new-item <<<<  MyCompany -usetx

Get-Transaction 명령은 트랜잭션이 롤백되었으며 SubscriberCount가 0임을 확인합니다.

RollbackPreference   SubscriberCount   Status
------------------   ---------------   ------
Error                0                 RolledBack

예제 6: 롤백 기본 설정 변경

트랜잭션이 오류에 더 관대하도록 하려면 Start-Transaction의 RollbackPreference 매개 변수를 사용하여 기본 설정을 변경할 수 있습니다.

다음 명령은 롤백 기본 설정이 "Never"인 트랜잭션을 시작합니다.

start-transaction -rollbackpreference Never

이 경우 명령이 실패하면 트랜잭션이 자동으로 롤백되지 않습니다.

New-Item MyCompany -UseTX
New-Item : A key at this path already exists
At line:1 char:9
+ new-item <<<<  MyCompany -usetx

트랜잭션이 여전히 활성화되어 있으므로 트랜잭션의 일부로 명령을 다시 제출할 수 있습니다.

New-Item MyOtherCompany -UseTX

예제 7: USE-TRANSACTION CMDLET 사용

Use-Transaction cmdlet을 사용하면 트랜잭션 사용 Microsoft .NET Framework 개체에 대해 직접 스크립팅을 수행할 수 있습니다. Use-Transaction은 Microsoft.PowerShell.Commands.Management.TransactedString 클래스의 인스턴스와 같이 트랜잭션 사용 .NET Framework 개체를 사용하는 명령 및 식만 포함할 수 있는 스크립트 블록을 사용합니다.

다음 명령은 트랜잭션을 시작합니다.

start-transaction

다음 New-Object 명령은 TransactedString 클래스의 인스턴스를 만들고 $t 변수에 저장합니다.

$t = New-Object Microsoft.PowerShell.Commands.Management.TransactedString

다음 명령은 TransactedString 개체의 Append 메서드를 사용하여 문자열에 텍스트를 추가합니다. 명령은 트랜잭션의 일부가 아니므로 변경 내용이 즉시 적용됩니다.

$t.append("Windows")

다음 명령은 동일한 Append 메서드를 사용하여 텍스트를 추가하지만 트랜잭션의 일부로 텍스트를 추가합니다. 명령은 중괄호로 묶고 Use-Transaction의 ScriptBlock 매개 변수 값으로 설정됩니다. UseTransaction 매개 변수(UseTx)가 필요합니다.

use-transaction {$t.append(" PowerShell")} -usetx

$t 트랜잭션된 문자열의 현재 내용을 보려면 TransactedString 개체의 ToString 메서드를 사용합니다.

$t.tostring()

출력은 트랜잭션되지 않은 변경 내용만 유효하다는 것을 보여줍니다.

Windows

트랜잭션 내에서 $t 트랜잭션된 문자열의 현재 콘텐츠를 보려면 Use-Transaction 명령에 식을 포함하세요.

use-transaction {$s.tostring()} -usetx

출력에는 트랜잭션 뷰가 표시됩니다.

PowerShell

다음 명령은 트랜잭션을 커밋합니다.

complete-transaction

최종 문자열을 보려면 다음을 수행합니다.

$t.tostring()
PowerShell

예제 8: 다중 구독자 트랜잭션 관리

다른 트랜잭션이 진행 중인 동안 트랜잭션을 시작하면 PowerShell은 기본적으로 두 번째 트랜잭션을 만들지 않습니다. 대신 현재 트랜잭션에 구독자를 추가합니다.

이 예제에서는 다중 구독자 트랜잭션을 보고 관리하는 방법을 보여줍니다.

먼저 HKCU:\Software 키에서 트랜잭션을 시작합니다.

start-transaction

다음 명령은 Get-Transaction 명령을 사용하여 활성 트랜잭션을 가져옵니다.

get-transaction

결과는 활성 트랜잭션을 나타내는 개체를 보여 줍니다.

RollbackPreference   SubscriberCount   Status
------------------   ---------------   ------
Error                1                 Active

다음 명령은 레지스트리에 MyCompany 키를 추가합니다. 이 명령은 UseTransaction 매개 변수를 사용하여 트랜잭션에 명령을 포함합니다.

new-item MyCompany -UseTransaction

다음 명령은 Start-Transaction 명령을 사용하여 트랜잭션을 시작합니다. 이 명령은 명령 프롬프트에 입력되지만 트랜잭션이 포함된 스크립트를 실행할 때 이 시나리오가 발생할 가능성이 높습니다.

start-transaction

Get-Transaction 명령은 트랜잭션 개체의 구독자 수가 증가했음을 보여줍니다. 이제 값이 2입니다.

RollbackPreference   SubscriberCount   Status
------------------   ---------------   ------
Error                2                 Active

다음 명령은 New-ItemProperty cmdlet을 사용하여 MyKey 레지스트리 항목을 MyCompany 키에 추가합니다. UseTransaction 매개 변수를 사용하여 트랜잭션에 명령을 포함합니다.

new-itemproperty -path MyCompany -name MyKey -UseTransaction

MyCompany 키는 레지스트리에 없지만 두 명령이 동일한 트랜잭션의 일부이므로 이 명령이 성공합니다.

다음 명령은 트랜잭션을 커밋합니다. 트랜잭션을 롤백하면 모든 구독자에 대해 트랜잭션이 롤백됩니다.

complete-transaction

Get-Transaction 명령은 트랜잭션 개체의 구독자 수가 1이지만 상태 값은 여전히 활성 상태(커밋되지 않음)임을 보여 줍니다.

RollbackPreference   SubscriberCount   Status
------------------   ---------------   ------
Error                1                 Active

트랜잭션 커밋을 완료하려면 두 번째 Complete- Transaction 명령을 입력합니다. 다중 구독자 트랜잭션을 커밋하려면 각 Start-Transaction 명령에 대해 하나의 Complete-Transaction 명령을 입력해야 합니다.

complete-transaction

또 다른 Get-Transaction 명령은 트랜잭션이 커밋되었음을 보여줍니다.

RollbackPreference   SubscriberCount   Status
------------------   ---------------   ------
Error                0                 Committed

예제 9: 독립 트랜잭션 관리

다른 트랜잭션이 진행 중인 동안 트랜잭션을 시작할 때 Start-Transaction의 Independent 매개 변수를 사용하여 새 트랜잭션을 원래 트랜잭션과 독립적으로 만들 수 있습니다.

이렇게 하면 Start-Transaction은 새 트랜잭션 개체를 만들고 새 트랜잭션을 활성 트랜잭션으로 만듭니다.

먼저 HKCU:\Software 키에서 트랜잭션을 시작합니다.

start-transaction

다음 명령은 Get-Transaction 명령을 사용하여 활성 트랜잭션을 가져옵니다.

get-transaction

결과는 활성 트랜잭션을 나타내는 개체를 보여 줍니다.

RollbackPreference   SubscriberCount   Status
------------------   ---------------   ------
Error                1                 Active

다음 명령은 트랜잭션의 일부로 MyCompany 레지스트리 키를 추가합니다. UseTransaction 매개 변수(UseTx)를 사용하여 활성 트랜잭션에 명령을 포함합니다.

new-item MyCompany -use

다음 명령은 새 트랜잭션을 시작합니다. 이 명령은 Independent 매개 변수를 사용하여 이 트랜잭션이 활성 트랜잭션의 구독자가 아님을 나타냅니다.

start-transaction -independent

독립 트랜잭션을 만들면 새(가장 최근에 만든) 트랜잭션이 활성 트랜잭션이 됩니다. Get-Transaction 명령을 사용하여 활성 트랜잭션을 가져올 수 있습니다.

get-transaction

트랜잭션의 SubscriberCount는 다른 구독자가 없고 트랜잭션이 새 구독자임을 나타내는 1입니다.

RollbackPreference   SubscriberCount   Status
------------------   ---------------   ------
Error                1                 Active

원래 트랜잭션을 관리하려면 먼저 새 트랜잭션을 완료(커밋 또는 롤백)해야 합니다.

다음 명령은 MyOtherCompany 키를 레지스트리에 추가합니다. UseTransaction 매개 변수(UseTx)를 사용하여 활성 트랜잭션에 명령을 포함합니다.

new-item MyOtherCompany -usetx

이제 트랜잭션을 롤백합니다. 두 구독자가 있는 단일 트랜잭션이 있는 경우 트랜잭션을 롤백하면 모든 구독자에 대한 전체 트랜잭션이 롤백됩니다.

그러나 이러한 트랜잭션은 독립적이므로 최신 트랜잭션을 롤백하면 레지스트리 변경 내용이 취소되고 원래 트랜잭션이 활성 트랜잭션이 됩니다.

undo-transaction

Get-Transaction 명령은 원래 트랜잭션이 세션에서 여전히 활성 상태임을 확인합니다.

get-transaction
RollbackPreference   SubscriberCount   Status
------------------   ---------------   ------
Error                1                 Active

다음 명령은 활성 트랜잭션을 커밋합니다.

complete-transaction

Get-ChildItem 명령은 레지스트리가 변경되었음을 보여줍니다.

dir m*
Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
 83   1 Microsoft                      {(default)}
  0   0 MyCompany                      {}

참고 항목