다음을 통해 공유


Start-Transaction

트랜잭션을 시작합니다.

구문

Start-Transaction
     [-Timeout <Int32>]
     [-Independent]
     [-RollbackPreference <RollbackSeverity>]
     [-WhatIf]
     [-Confirm]
     [<CommonParameters>]

Description

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

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

트랜잭션에 사용되는 cmdlet은 트랜잭션을 지원하도록 설계되어야 합니다. 트랜잭션을 지원하는 Cmdlet에는 UseTransaction 매개 변수가 있습니다. 공급자에서 트랜잭션을 수행하려면 공급자가 트랜잭션을 지원해야 합니다. Windows Vista 이상 버전의 Windows 운영 체제의 Windows PowerShell 레지스트리 공급자는 트랜잭션을 지원합니다. Microsoft.PowerShell.Commands.Management.TransactedString 클래스를 사용하여 Windows PowerShell을 지원하는 Windows 시스템의 모든 버전에서 트랜잭션에 식을 포함할 수도 있습니다. 다른 Windows PowerShell 공급자도 트랜잭션을 지원할 수 있습니다.

한 번에 하나의 트랜잭션만 활성화할 수 있습니다. 트랜잭션이 진행 중인 동안 독립된 새 트랜잭션을 시작하면 새 트랜잭션이 활성 트랜잭션이 되고 원래 트랜잭션을 변경하기 전에 새 트랜잭션을 커밋하거나 롤백해야 합니다.

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

예제

예제 1: 트랜잭션 시작 및 롤백

Set-Location hkcu:\software
Start-Transaction
New-Item "ContosoCompany" -UseTransaction
New-ItemProperty "ContosoCompany" -Name "MyKey" -Value 123 -UseTransaction
Undo-Transaction

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

예제 2: 트랜잭션 시작 및 완료

Set-Location hkcu:\software
Start-Transaction
New-Item "ContosoCompany" -UseTransaction
New-ItemProperty "ContosoCompany" -Name "MyKey" -Value 123 -UseTransaction
Complete-Transaction

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

예제 3: 다른 롤백 기본 설정 사용

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

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

첫 번째 명령 Start-Transaction 집합에서는 RollbackPreference를 사용하지 않습니다. 따라서 기본값(오류)이 사용됩니다. 트랜잭션 명령에서 오류가 발생하면 지정된 경로가 존재하지 않고 트랜잭션이 자동으로 롤백됩니다.

두 번째 명령 집합에서는 값이 Start-Transaction Never인 RollbackPreference를 사용합니다. 따라서 트랜잭션 명령에서 오류가 발생하면 트랜잭션이 여전히 활성 상태이며 성공적으로 완료될 수 있습니다.

대부분의 트랜잭션은 오류 없이 수행해야 하므로 RollbackPreference기본값이 일반적으로 선호됩니다.

예제 4: 트랜잭션이 진행 중인 동안 이 cmdlet 사용

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

이 예제에서는 트랜잭션이 진행 중인 동안의 사용 Start-Transaction 효과를 보여 주며, 효과는 진행 중인 트랜잭션에 조인하는 것과 비슷합니다.

이 명령은 간소화된 명령이지만 트랜잭션이 전체 트랜잭션을 포함하는 스크립트를 실행하는 경우 이 시나리오가 자주 발생합니다.

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

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

전체 트랜잭션이 완료될 때까지 레지스트리를 변경하지 않습니다. 트랜잭션을 완료하려면 각 구독자에 대해 하나씩 두 개의 Complete-Transaction 명령을 입력해야 합니다. 언제든지 트랜잭션을 롤백하는 경우 두 구독자에 대해 모든 트랜잭션이 롤백됩니다.

예제 5: 진행 중인 동안 독립 트랜잭션 시작

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}

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

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

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

명령 Start-Transaction 의 두 번째 집합에서 명령은 Independent 매개 변수를 사용합니다. Get-Transaction 다음 명령은 활성 트랜잭션에 대한 트랜잭션 개체를 보여 줍니다. 이 개체는 최신 트랜잭션입니다. 구독자 수는 1과 같으며 트랜잭션이 관련이 없다는 것을 보여 줍니다.

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

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

예제 6: 트랜잭션의 일부가 아닌 명령 실행

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                     {}

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

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

첫 번째 Get-ChildItem 명령은 효과를 표시합니다. 두 번째 New-Item 명령은 즉시 완료되지만 트랜잭션이 커밋될 때까지 첫 번째 명령과 세 번째 New-Item 명령은 유효하지 않습니다.

Complete-Transaction 명령은 트랜잭션을 커밋합니다. 결과적으로 두 번째 Get-ChildItem 명령은 모든 새 항목이 레지스트리에 추가되었음을 보여줍니다.

예제 7: 지정된 시간에 완료되지 않는 트랜잭션 롤백

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

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

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

매개 변수

-Confirm

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

형식:SwitchParameter
별칭:cf
Position:Named
Default value:False
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-Independent

이 cmdlet이 진행 중인 트랜잭션과 독립적인 트랜잭션을 시작했음을 나타냅니다. 기본적으로 다른 트랜잭션이 진행 중인 동안 사용하는 Start-Transaction 경우 진행 중인 트랜잭션에 새 구독자가 추가됩니다. 이 매개 변수는 트랜잭션이 세션에서 이미 진행 중인 경우에만 적용됩니다.

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

Independent 매개 변수를 지정하는 경우 이 cmdlet은 원래 트랜잭션에 영향을 주지 않고 완료하거나 실행 취소할 수 있는 새 트랜잭션을 만듭니다. 그러나 한 번에 하나의 트랜잭션만 활성화할 수 있으므로 원래 트랜잭션에서 작업을 다시 시작하기 전에 새 트랜잭션을 완료하거나 롤백해야 합니다.

형식:SwitchParameter
Position:Named
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-RollbackPreference

트랜잭션이 자동으로 롤백되는 조건을 지정합니다. 이 매개 변수에 허용되는 값은 다음과 같습니다.

  • Error 종료 또는 종료되지 않는 오류가 발생하면 트랜잭션이 자동으로 롤백됩니다.
  • TerminatingError 종료 오류가 발생하면 트랜잭션이 자동으로 롤백됩니다.
  • Never 트랜잭션은 자동으로 롤백되지 않습니다.

기본값은 Error입니다.

형식:RollbackSeverity
허용되는 값:Error, TerminatingError, Never
Position:Named
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-Timeout

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

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

형식:Int32
별칭:TimeoutMins
Position:Named
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-WhatIf

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

형식:SwitchParameter
별칭:wi
Position:Named
Default value:False
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

입력

None

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

출력

None

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