Share via


Complete-Transaction

활성 트랜잭션을 커밋합니다.

Syntax

Complete-Transaction
        [-WhatIf]
        [-Confirm]
        [<CommonParameters>]

Description

cmdlet은 Complete-Transaction 활성 트랜잭션을 커밋합니다. 트랜잭션을 커밋하면 트랜잭션의 명령이 마무리되어 명령의 영향을 받는 데이터가 변경됩니다.

트랜잭션에 여러 구독자가 포함된 경우 트랜잭션을 커밋하려면 모든 Start-Transaction 명령에 대해 하나의 Complete-Transaction 명령을 입력해야 합니다.

cmdlet Complete-Transaction 은 Windows PowerShell에서 트랜잭션 기능을 지원하는 cmdlet 집합 중 하나입니다. 자세한 내용은 about_Transactions 참조하세요.

예제

예제 1: 트랜잭션 커밋

Set-Location hkcu:\software
Start-Transaction
New-Item MyCompany -UseTransaction
Get-ChildItem m*

Hive: HKEY_CURRENT_USER\software

SKC  VC Name                           Property
---  -- ----                           --------
82   1 Microsoft                      {(default)}

Complete-Transaction
Get-ChildItem m*

Hive: HKEY_CURRENT_USER\Software

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

이 예제에서는 cmdlet을 사용하여 트랜잭션을 Complete-Transaction 커밋할 때 발생하는 작업을 보여줍니다.

Start-Transaction 명령은 트랜잭션을 시작합니다. New-Item 명령은 UseTransaction 매개 변수를 사용하여 트랜잭션에 명령을 포함합니다.

첫 번째 Get-ChildItem 명령은 새 항목이 아직 레지스트리에 추가되지 않은 것을 보여줍니다.

Complete-Transaction 명령은 트랜잭션을 커밋하여 레지스트리 변경을 효과적으로 만듭니다. 결과적으로 두 번째 Get-ChildItem 명령은 레지스트리가 변경되었음을 보여줍니다.

예제 2: 구독자가 둘 이상인 트랜잭션 커밋

Set-Location hkcu:\software
Start-Transaction
New-Item MyCompany -UseTransaction

Hive: HKEY_CURRENT_USER\Software

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

Start-Transaction
Get-Transaction

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

New-ItemProperty -Path MyCompany -Name MyKey -Value -UseTransaction

MyKey
-----
123

Complete-Transaction
Get-Transaction

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

Get-ChildItem m*

Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
82   1 Microsoft                      {(default)}

Complete-Transaction
Get-ChildItem m*

Hive: HKEY_CURRENT_USER\Software

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

이 예제에서는 둘 이상의 구독자가 있는 트랜잭션을 커밋하는 데 사용하는 Complete-Transaction 방법을 보여 있습니다.

다중 구독자 트랜잭션을 커밋하려면 모든 Start-Transaction 명령에 대해 하나의 Complete-Transaction 명령을 입력해야 합니다. 데이터는 최종 Complete-Transaction 명령이 제출될 때만 변경됩니다.

데모용으로 이 예제에서는 명령줄에 입력된 일련의 명령을 보여 줍니다. 실제로 트랜잭션은 스크립트에서 실행될 가능성이 높으며, 보조 트랜잭션은 기본 스크립트에서 호출되는 함수 또는 도우미 스크립트에서 실행됩니다.

이 예제에서는 명령이 Start-Transaction 트랜잭션을 시작합니다. New-Item UseTransaction 매개 변수가 있는 명령은 MyCompany 키를 소프트웨어 키에 추가합니다. cmdlet은 New-Item 키 개체를 반환하지만 레지스트리의 데이터는 아직 변경되지 않습니다.

두 번째 Start-Transaction 명령은 기존 트랜잭션에 두 번째 구독자를 추가합니다. cmdlet은 Get-Transaction 구독자 수가 2임을 확인합니다. UseTransaction 매개 변수가 있는 New-ItemProperty 명령은 새 MyCompany 키에 레지스트리 항목을 추가합니다. 명령이 값을 반환하지만 레지스트리는 변경되지 않습니다.

첫 번째 Complete-Transaction 명령은 구독자 수를 1로 줄입니다. 명령으로 확인됩니다 Get-Transaction . 그러나 명령에서 알 Get-ChildItem m* 수 있듯이 데이터는 변경되지 않습니다.

두 번째 Complete-Transaction 명령은 전체 트랜잭션을 커밋하고 레지스트리의 데이터를 변경합니다. 이는 변경 내용을 표시하는 두 번째 Get-ChildItem m* 명령으로 확인됩니다.

예제 3: 데이터를 변경하지 않는 트랜잭션 수행

Set-Location hkcu:\software
Start-Transaction
New-Item MyCompany -UseTransaction
Get-ChildItem m*

Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
82   1 Microsoft                      {(default)}

Get-ChildItem m* -UseTransaction

Hive: HKEY_CURRENT_USER\Software

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

Complete-Transaction

이 예제에서는 트랜잭션에서 Get-* 명령 및 데이터를 변경하지 않는 다른 명령을 사용하는 값을 보여 줍니다. 트랜잭션에서 Get-\* 명령이 사용되는 경우 트랜잭션의 일부인 개체를 가져옵니다. 이 경우 트랜잭션의 변경 내용을 커밋하기 전에 미리 볼 수 있습니다.

이 예제에서는 트랜잭션이 시작됩니다. UseTransaction 매개 변수를 사용하는 New-Item 명령은 트랜잭션의 일부로 레지스트리에 새 키를 추가합니다.

명령이 실행될 때까지 Complete-Transaction 새 레지스트리 키가 레지스트리에 추가되지 않으므로 간단한 Get-ChildItem 명령은 새 키 없이 레지스트리를 표시합니다.

그러나 UseTransaction 매개 변수를 Get-ChildItem 명령에 추가하면 이 명령은 트랜잭션의 일부가 되며 아직 데이터에 추가되지 않은 경우에도 트랜잭션의 항목을 가져옵니다.

매개 변수

-Confirm

cmdlet을 실행하기 전에 확인 메시지가 표시됩니다.

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WhatIf

cmdlet이 실행될 경우 결과 동작을 표시합니다. cmdlet이 실행되지 않습니다.

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

입력

None

개체를 이 cmdlet으로 파이프할 수 없습니다.

출력

None

이 cmdlet은 어떠한 출력도 생성하지 않습니다.

참고

  • 커밋된 트랜잭션을 롤백하거나 롤백된 트랜잭션을 커밋할 수 없습니다.

    활성 트랜잭션이 아닌 트랜잭션은 롤백할 수 없습니다. 다른 트랜잭션을 롤백하려면 먼저 활성 트랜잭션을 커밋하거나 롤백해야 합니다.

    기본적으로 트랜잭션의 명령으로 인해 오류가 발생하는 경우와 같이 트랜잭션의 일부를 커밋할 수 없는 경우 전체 트랜잭션이 롤백됩니다.