트랜잭션을 시작합니다.

구문

Start-Transaction [-Independent] [-RollbackPreference {<Error> | <TerminatingError> | <Never>}] [-Timeout <int>] [-Confirm] [-WhatIf] [<CommonParameters>]

설명

Start-Transaction cmdlet은 하나의 단위로 관리되는 일련의 명령인 트랜잭션을 시작합니다. 트랜잭션은 완료("커밋") 또는 완전히 취소("롤백")할 수 있으므로 트랜잭션으로 변경된 모든 데이터는 원래의 상태로 복원할 수 있습니다. 트랜잭션의 명령은 하나의 단위로 관리되므로 모든 명령이 커밋되거나 모든 명령이 롤백됩니다.

기본적으로 트랜잭션의 명령이 오류를 생성하면 트랜잭션이 자동으로 롤백되지만 RollbackPreference 매개 변수를 사용하여 이 동작을 변경할 수 있습니다.

트랜잭션에 사용된 cmdlet은 트랜잭션을 지원해야 합니다. 트랜잭션을 지원하는 cmdlet은 UseTransaction 매개 변수를 갖습니다. 공급자에서 트랜잭션을 수행하려면 공급자가 트랜잭션을 지원해야 합니다. Windows Vista 이상 버전의 Windows PowerShell 레지스트리는 트랜잭션을 지원합니다. 또한 Microsoft.PowerShell.Commands.Management.TransactedString 클래스를 사용하여 Windows PowerShell을 지원하는 모든 Windows 버전의 트랜잭션에 식을 포함할 수도 있습니다. 다른 Windows PowerShell 공급자도 트랜잭션을 지원할 수 있습니다.

한 번에 하나의 트랜잭션만 활성화할 수 있습니다. 트랜잭션을 완료하거나 취소하지 않고 새로운 독립 트랜잭션을 시작하면 새 트랜잭션이 활성 트랜잭션이 되며 원본 트랜잭션을 변경하기 전에 새 트랜잭션을 커밋하거나 롤백해야 합니다.

Start-Transaction cmdlet은 Windows PowerShell의 트랜잭션 기능을 지원하는 cmdlet 집합 중 하나입니다. 자세한 내용은 about_Transactions를 참조하십시오.

매개 변수

-Independent

진행 중인 트랜잭션에 독립적인 트랜잭션을 시작합니다. 기본적으로 다른 트랜잭션이 진행 중일 때 Start-Transaction을 사용하면 진행 중인 트랜잭션에 새 가입자가 추가됩니다. 이 매개 변수는 세션에서 트랜잭션이 이미 진행 중인 경우에만 적용됩니다.

기본적으로 트랜잭션이 진행 중일 때 Start-Transaction을 사용하면 기존 트랜잭션 개체가 다시 사용되고 가입자 수가 증가합니다. 결과는 원본 트랜잭션 가입과 매우 유사합니다. Undo-Transaction 명령은 전체 트랜잭션을 롤백합니다. 트랜잭션을 완료하려면 각 가입자에 대해 Complete-Transaction 명령을 입력해야 합니다. 동시에 진행 중인 트랜잭션은 거의 관련되어 있으므로 대부분의 경우 기본값을 사용하면 됩니다.

Independent 매개 변수를 사용하는 경우 원본 트랜잭션에 영향을 주지 않고 완료하거나 취소할 수 있는 새 트랜잭션이 만들어집니다. 그러나 한 번의 한 개의 트랜잭션만 활성 상태일 수 있으므로 새 트랜잭션을 완료하거나 롤백해야만 원본 트랜잭션을 다시 사용할 수 있습니다.

필수 여부

false

위치

named

기본값

Reuse the original transaction object.

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

-RollbackPreference <RollbackSeverity>

트랜잭션이 자동으로 롤백되는 조건을 지정합니다. 기본값은 "Error"입니다.

유효한 값은 다음과 같습니다.

-- Error: 종료 오류 또는 종료되지 않는 오류가 발생하는 경우 트랜잭션이 자동으로 롤백됩니다. 기본값은 "Error"입니다.

-- Terminating error: 종료 오류가 발생하는 경우 트랜잭션이 자동으로 롤백됩니다.

-- Never: 트랜잭션이 자동으로 롤백되지 않습니다.

필수 여부

false

위치

named

기본값

Error

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

-Timeout <int>

트랜잭션이 활성 상태일 수 있는 최대 시간(분)을 지정합니다. 제한 시간이 만료되면 트랜잭션이 자동으로 롤백됩니다.

기본적으로 명령줄에서 시작된 트랜잭션에 대한 제한 시간은 없습니다. 트랜잭션을 스크립트로 시작하면 기본 제한 시간은 30분입니다.

필수 여부

false

위치

named

기본값

No timeout (infinite)

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

-Confirm

명령을 실행하기 전에 확인 메시지를 표시합니다.

필수 여부

false

위치

named

기본값

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

-WhatIf

명령을 실제로 실행하지 않고도 명령이 실행될 경우 발생할 수 있는 현상을 설명합니다.

필수 여부

false

위치

named

기본값

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

<CommonParameters>

이 cmdlet은 -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, -OutVariable 등의 일반 매개 변수를 지원합니다. 자세한 내용은 about_Commonparameters.

입력 및 출력

입력 유형은 cmdlet으로 파이프할 수 있는 개체의 유형입니다. 반환 유형은 cmdlet에서 반환되는 개체의 유형입니다.

입력

없음

입력을 이 cmdlet으로 파이프할 수 없습니다.

출력

없음

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

예 1

C:\PS>cd hkcu:\software

PS HKCU:\software> start-transaction

PS HKCU:\software> new-item MyCompany -UseTransaction

PS HKCU:\software> new-itemproperty MyCompany -name MyKey -value 123 -UseTransaction

PS HKCU:\software> undo-transaction

설명
-----------
이들 명령은 트랜잭션을 시작한 후 롤백합니다. 트랜잭션이 롤백되므로 레지스트리가 변경되지 않습니다.






예 2

C:\PS>cd hkcu:\software

PS HKCU:\software> start-transaction

PS HKCU:\software> new-item MyCompany -UseTransaction

PS HKCU:\software> new-itemproperty MyCompany -name MyKey -value 123 -UseTransaction

PS HKCU:\software> complete-transaction

설명
-----------
이들 명령은 전체 트랜잭션을 시작한 후 완료합니다. Complete-Transaction 명령을 사용할 때까지 레지스트리가 변경되지 않습니다.






예 3

C:\PS>cd HKCU:\software
PS HKCU:\software> start-transaction
PS HKCU:\software> new-item -path NoPath -name MyCompany -UseTransaction
PS HKCU:\software> new-item -path . -name MyCompany -UseTransaction

PS HKCU:\software> start-transaction -RollbackPreference never
PS HKCU:\software> new-item -path NoPath -name MyCompany -UseTransaction
PS HKCU:\software> new-item -path . -name MyCompany -UseTransaction

# Start-Transaction (-rollbackpreference error)

PS HKCU:\software> start-transaction
PS HKCU:\software> new-item -path NoPath -Name MyCompany -UseTransaction
New-Item : The registry key at the specified path does not exist.
At line:1 char:9
+ new-item <<<<  -path NoPath -Name MyCompany -UseTransaction

PS HKCU:\software> new-item -path . -name MyCompany -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 MyCompany -UseTransaction



# Start-Transaction (-rollbackpreference never)
PS HKCU:\software> start-transaction -RollbackPreference never
PS HKCU:\software> new-item -path NoPath -name MyCompany -UseTransaction
New-Item : The registry key at the specified path does not exist.
At line:1 char:9
+ new-item <<<<  -path NoPath -name MyCompany -UseTransaction


PS HKCU:\software> new-item -path . -name MyCompany -UseTransaction
  Hive: HKEY_CURRENT_USER\Software

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

PS HKCU:\Software> complete-transaction
# Succeeds

설명
-----------
이 예에서는 RollbackPreference 매개 변수 값을 변경하는 효과를 보여 줍니다.

첫 번째 명령 집합에서 Start-Transaction 명령은 RollbackPreference 매개 변수를 사용하지 않습니다. 그 결과 기본값 "Error"가 사용됩니다. 트랜잭션 명령에서 오류가 발생하면 즉 지정한 경로가 존재하지 않으면 트랜잭션이 자동으로 롤백됩니다.

두 번째 명령 집합에서 Start-Transaction 명령은 값이 "Never"인 RollbackPreference 매개 변수를 사용합니다. 그 결과 트랜잭션 명령에 오류가 발생해도 트랜잭션이 여전히 활성 상태가 되므로 성공적으로 완료할 수 있습니다.

대부분의 트랜잭션은 오류 없이 수행해야 하므로 일반적으로 RollbackPreference 매개 변수의 기본값을 사용하는 것이 좋습니다.






예 4

C:\PS>cd HKCU:\software

PS HKCU:\software> start-transaction
PS HKCU:\software> new-item MyCompany -UseTransaction

PS HKCU:\software> start-transaction
PS HKCU:\software> get-transaction
PS HKCU:\software> new-item MyCompany2 -UseTransaction

PS HKCU:\software> complete-transaction
PS HKCU:\software> complete-transaction

PS HKCU:\Software> Get-Transaction

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

설명
-----------
이 예에서는 트랜잭션 진행 중 Start-Transaction 명령을 사용하는 효과를 보여 줍니다. 효과는 진행 중인 트랜잭션에 가입하는 것과 매우 유사합니다.

간단한 명령이지만 이 시나리오는 트랜잭션이 전체 트랜잭션을 포함하는 스크립트 실행과 관련된 경우 흔히 발생합니다.

첫 번째 Start-Transaction 명령은 트랜잭션을 시작합니다. 첫 번째 New-Item 명령도 트랜잭션의 일부입니다. 

두 번째 Start-Transaction 명령은 트랜잭션에 새 가입자를 추가합니다. Get-Transaction 명령은 이제 가입자 수가 2인 트랜잭션을 반환합니다. 두 번째 New-Item 명령은 동일한 트랜잭션의 일부입니다.

전체 트랜잭션이 완료될 때까지 레지스트리가 변경되지 않습니다. 트랜잭션을 완료하려면 각 가입자 당 Complete-Transaction 명령을 두 번 입력해야 합니다. 언제든지 트랜잭션을 롤백하려면 두 가입자에 대해 전체 트랜잭션을 롤백해야 합니다.






예 5

C:\PS>cd HKCU:\software
PS HKCU:\software> start-transaction
PS HKCU:\software> new-item MyCompany -UseTransaction

PS HKCU:\software> start-transaction -independent
PS HKCU:\software> get-transaction
PS HKCU:\software> undo-transaction

PS HKCU:\software> new-itemproperty -path MyCompany -name MyKey -value 123 -UseTransaction
PS HKCU:\software> complete-transaction
PS HKCU:\software> dir my*

PS HKCU:\Software> get-transaction

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

PS HKCU:\software> undo-transaction
PS HKCU:\software> new-itemproperty -path MyCompany -name MyKey -value 123 -UseTransaction

MyKey
-----
123

PS HKCU:\software> complete-transaction
PS HKCU:\software> dir my*

   Hive: HKEY_CURRENT_USER\Software

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

설명
-----------
이 예에서는 다른 트랜잭션 진행 중 Start-Transaction의 독립 매개 변수를 사용하여 트랜잭션을 시작하는 효과를 보여 줍니다. 이 경우 원본 트랜잭션에 영향을 주지 않고 새 트랜잭션이 롤백됩니다.

트랜잭션은 논리적으로 독립적이지만 한 번의 한 개의 트랜잭션만 활성 상태일 수 있으므로 원본 트랜잭션 작업을 다시 시작하기 전에 최신의 트랜잭션을 롤백하거나 커밋해야 합니다.

첫 번째 명령은 트랜잭션을 시작합니다. New-Item 명령은 첫 번째 트랜잭션의 일부입니다.

두 번째 명령에서 Start-Transaction 명령은 Independent 매개 변수를 사용합니다. 다음의 Get-Transaction 명령은 활성(최신) 트랜잭션의 트랜잭션 개체를 보여 줍니다. 가입자 수가 1이므로 트랜잭션이 관련되지 않았음을 나타냅니다. 

Undo-Transaction 명령을 사용하여 활성 트랜잭션을 롤백하면 원본 트랜잭션이 다시 활성화됩니다.

원본 트랜잭션의 일부인 New-ItemProperty 명령은 오류 없이 완료되며, Complete-Transaction 명령을 사용하여 원본 트랜잭션을 완료할 수 있습니다. 그 결과 레지스트리가 변경됩니다.






예 6

C:\PS>cd hkcu:\software

PS HKCU:\software> start-transaction
PS HKCU:\software> new-item MyCompany1 -UseTransaction
PS HKCU:\software> new-item MyCompany2 
PS HKCU:\software> new-item MyCompany3 -UseTransaction

PS HKCU:\software> dir my*

PS HKCU:\software> complete-transaction
PS HKCU:\software> dir my*

PS HKCU:\Software> dir my*

   Hive: HKEY_CURRENT_USER\Software

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

PS HKCU:\Software> complete-transaction

PS HKCU:\Software> dir my*

   Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
  0   0 MyCompany1                     {}
  0   0 MyCompany2                     {}
  0   0 MyCompany3                     {}

설명
-----------
이 예에서는 트랜잭션 진행 중 전송된 명령이 트랜잭션에 포함되는지 여부를 보여 줍니다. UseTransaction 매개 변수를 사용하는 명령만 트랜잭션의 일부입니다.

첫 번째 및 세 번째 New-Item 명령은 UseTransaction 매개 변수를 사용하므로 트랜잭션의 일부입니다. 두 번째 New-Item 명령은 UseTransaction 매개 변수를 사용하지 않으므로 트랜잭션의 일부가 아닙니다.

첫 번째 "dir" 명령은 해당 효과를 보여 줍니다. 두 번째 New-Item 명령은 즉시 완료되지만 첫 번째 및 세 번째 New-Item 명령은 트랜잭션이 커밋될 때까지 적용되지 않습니다.

Complete-Transaction 명령은 트랜잭션을 커밋합니다. 그 결과 두 번째 "dir" 명령은 모든 새 항목이 레지스트리에 추가되는 것을 보여 줍니다.






예 7

C:\PS>start-transaction -timeout 2

# Wait two minutes...

C:\PS> get-transaction

C:\PS> new-item HKCU:\Software\MyCompany -UseTransaction

C:\PS> start-transaction -timeout 2

# Wait two minutes...

C:\PS>> get-transaction

RollbackPreference   SubscriberCount   Status
------------------   ---------------   -----------
Error                1                 RolledBack 


C:\PS> new-item HKCU:\Software\MyCompany -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

설명
-----------
이 명령은 Start-Transaction의 Timeout 매개 변수를 사용하여 2분 내에 완료해야 하는 트랜잭션을 시작합니다. 제한 시간 내에 트랜잭션이 완료되지 않으면 자동으로 롤백됩니다.

제한 시간이 만료되어도 메시지는 나타나지 않지만 트랜잭션 개체의 Status 속성이 RolledBack으로 설정되고 UseTransaction 매개 변수를 사용하는 명령이 실패합니다.






참고 항목




목차