about_Transactions

업데이트 날짜: 2014년 5월

적용 대상: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

항목

about_Transactions

간단한 설명

Windows PowerShell®에서 트랜잭션 작업을 관리하는 방법을 설명합니다.

자세한 설명

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

트랜잭션 정보

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

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

트랜잭션은 데이터 처리, 특히 데이터베이스 작업과 금융 거래에서 널리 사용됩니다. 모두 실패하지 않고 일부 명령은 성공하고 일부는 실패하여 시스템이 손상, 오류, 해석할 수 없는 상태가 된 명령 집합에 대한 최악의 시나리오 경우, 트랜잭션이 자주 사용됩니다.

트랜잭션 CMDLET

Windows PowerShell에는 트랜잭션 관리를 위한 몇 가지 cmdlet이 있습니다.

      Cmdlet                 Description
      --------------         ---------------------------------    
      Start-Transaction      Starts a new transaction. 

      Use-Transaction        Adds a command or expression to the
                             transaction. The command must use
                             transaction-enabled objects.

      Undo-Transaction       Rolls back the transaction so that
                             no data is changed by the transaction.

      Complete-Transaction   Commits the transaction. The data
                             affected by the transaction is changed.

      Get-Transaction        Gets information about the active
                             transaction.

트랜잭션 cmdlet의 목록을 보려면 다음을 입력합니다.

          get-command *transaction

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

          get-help <cmdlet-name> -detailed

예를 들면 다음과 같습니다.

          get-help use-transaction -detailed

트랜잭션이 사용 가능한 요소

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

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

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

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

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

        get-help <provider-name>

예를 들어 레지스트리 공급자의 도움말을 가져오려면 다음을 입력합니다.

        get-help registry

USETRANSACTION 매개 변수

트랜잭션을 지원할 수 있는 cmdlet은 UseTransaction 매개 변수를 갖습니다. 이 매개 변수는 활성 트랜잭션에 명령을 포함합니다. Full 매개 변수 이름이나 별칭 "usetx"를 사용할 수 있습니다.

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

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

        get-help * -parameter UseTransaction

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

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

트랜잭션 개체

트랜잭션은 트랜잭션 개체인 System.Management.Automation.Transaction에 의해 Windows PowerShell에 표시됩니다.

개체에는 다음 속성이 있습니다.

RollbackPreference:

현재 트랜잭션에 대해 설정된 롤백 기본 설정을 포함합니다. Start-Transaction을 사용하여 트랜잭션을 시작하는 경우 롤백 기본 설정을 설정할 수 있습니다.

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

Status:

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

SubscriberCount:

트랜잭션의 구독자 수를 포함합니다. 한 트랜잭션이 진행되는 동안 다른 트랜잭션을 시작하는 경우 구독자는 해당 트랜잭션에 추가됩니다. 구독자 수는 구독자가 트랜잭션을 커밋할 때 감소합니다.

활성 트랜잭션

Windows PowerShell에서는 한 번에 한 트랜잭션만 활성화되고 활성 트랜잭션만 관리할 수 있습니다. 같은 세션에서 여러 트랜잭션을 진행할 수 있지만, 가장 최근 시작된 트랜잭션만 활성화됩니다.

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

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

다른 트랜잭션을 관리하려면 먼저 커밋이나 롤백을 수행하여 활성 트랜잭션을 종료해야 합니다. 이를 수행하면 이전 트랜잭션이 자동으로 활성화됩니다. 트랜잭션은 시작된 역순으로 활성화되기 때문에 가장 최근에 시작된 트랜잭션이 항상 활성화됩니다.

구독자 및 독립 트랜잭션

한 트랜잭션이 진행되는 동안 또 하나의 트랜잭션을 시작하면 Windows PowerShell은(는) 기본적으로 새 트랜잭션을 시작하지 않습니다. 대신에 현재 트랜잭션에 "구독자"를 추가합니다.

트랜잭션에 여러 가입자가 있는 경우 아무 지점에 있는 하나의 Undo-Transaction 명령은 모든 가입자에 대해 전체 트랜잭션을 롤백합니다. 그러나 트랜잭션을 커밋하려면 모든 가입자에 대해 Complete-Transaction 명령을 입력해야 합니다.

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

          (Get-Transaction).SubscriberCount

다른 트랜잭션이 진행되고 있는 동안 시작된 대부분 트랜잭션이 원본 트랜잭션과 관련이 있기 때문에 구독자를 추가하는 것이 기본 동작입니다. 일반적인 모델의 경우, 트랜잭션을 포함한 스크립트가 해당 트랜잭션을 포함한 도우미 스크립트를 호출합니다. 트랜잭션들이 서로 관련되어 있기 때문에 이들은 한 단위로 롤백 또는 커밋되어야 합니다. 여기에 섹션 본문을 삽입합니다.

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

독립 트랜잭션을 시작할 때, Start-Transaction은 새로운 트랜잭션 개체를 만들고 새 트랜잭션은 활성 트랜잭션이 됩니다. 독립 트랜잭션은 원본 트랜잭션에 영향을 주지 않고 커밋 또는 롤백될 수 있습니다.

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

데이터 변경

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

트랜잭션을 사용하여 공유 데이터를 관리하는 경우 이를 명심하세요. 일반적으로 데이터베이스가 작업 중인 데이터를 잠그는 메커니즘을 가지고 있어, 다른 사용자, 다른 명령, 스크립트, 함수가 이를 변경하지 못하게 합니다.

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

예제

이 섹션의 예제는 Windows PowerShell 레지스트리 공급자를 사용하고 이에 익숙한 것으로 가정합니다. 레지스트리 공급자에 대한 자세한 내용을 보려면 "get-help registry"를 입력합니다.

예제 1: 트랜잭션 커밋

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

        start-transaction

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

예를 들어 다음 명령은 HKCU: drive의 Software 키에 현재 위치를 설정하며 트랜잭션에 포함되지 않습니다.

        cd hkcu:\Software

MyCompany 키를 만드는 다음 명령은 New-Item 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                 {}

트랜잭션을 롤백하려면 Undo-Transaction 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의 Use-Transaction 매개 변수의 값으로 설정됩니다. UseTransaction 매개 변수(UseTx)는 필수 사항입니다.

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

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

        $t.tostring()

출력은 트랜잭션되지 않은 변경 사항만 적용됨을 보여줍니다.

        Windows

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

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

출력은 트랜잭션 보기를 보여줍니다.

        Windows PowerShell

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

        complete-transaction

최종 문자열을 보려면:

        $t.tostring()

        Windows PowerShell

예제 7: 여러 구독자 트랜잭션 관리

한 트랜잭션이 진행되는 동안 또 하나의 트랜잭션을 시작하면 Windows 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이지만 Status 값은 여전히 Active(커밋되지 않음)임을 보여줍니다..

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

트랜잭션 커밋을 종료하려면 두 번째 Complete-Transaction 명령을 입력합니다. 여러 구독자 트랜잭션을 커밋하려면 각 Start-Transaction 명령에 대해 한 번씩 Complete-Transaction 명령을 입력해야 합니다.

        complete-transaction

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

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

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

한 트랜잭션이 진행 중인 동안 다른 트랜잭션을 시작하는 경우, 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-Transaction 명령은 레지스트리가 변경되었음을 보여줍니다.

        dir m*


        Hive: HKEY_CURRENT_USER\Software

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

참고 항목

Start-Transaction

Get-Transaction

Complete-Transaction

Undo-Transaction

Use-Transaction

레지스트리(공급자)

about_Providers

Get-PSProvider

Get-ChildItem