Start-Transaction

Memulai transaksi.

Sintaks

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

Deskripsi

Start-Transaction Cmdlet memulai transaksi, yang merupakan serangkaian perintah yang dikelola sebagai unit. Transaksi dapat diselesaikan, atau dilakukan. Atau, itu dapat sepenuhnya dibatalkan, atau digulung balik, sehingga data apa pun yang diubah oleh transaksi dipulihkan ke keadaan semula. Karena perintah dalam transaksi dikelola sebagai unit, semua perintah diterapkan atau semua perintah digulung balik.

Secara default, jika ada perintah dalam transaksi yang menghasilkan kesalahan, transaksi digulung balik secara otomatis. Anda dapat menggunakan parameter RollbackPreference untuk mengubah perilaku ini.

Cmdlet yang digunakan dalam transaksi harus dirancang untuk mendukung transaksi. Cmdlet yang mendukung transaksi memiliki parameter UseTransaction . Untuk melakukan transaksi di penyedia, penyedia harus mendukung transaksi. Penyedia Windows PowerShell Registry di Windows Vista dan versi yang lebih baru dari sistem operasi Windows mendukung transaksi. Anda juga dapat menggunakan kelas Microsoft.PowerShell.Commands.Management.TransactedString untuk menyertakan ekspresi dalam transaksi pada versi sistem Windows apa pun yang mendukung Windows PowerShell. Penyedia Windows PowerShell lainnya juga dapat mendukung transaksi.

Hanya satu transaksi yang dapat aktif pada satu waktu. Jika Anda memulai transaksi baru yang independen saat transaksi sedang berlangsung, transaksi baru menjadi transaksi aktif, dan Anda harus menerapkan atau menggulung balik transaksi baru sebelum Anda membuat perubahan pada transaksi asli.

Start-Transaction cmdlet adalah salah satu set cmdlet yang mendukung fitur transaksi di Windows PowerShell. Untuk informasi selengkapnya, lihat about_Transactions.

Contoh

Contoh 1: Memulai dan mengembalikan transaksi

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

Perintah ini dimulai lalu mengembalikan transaksi. Karena transaksi digulung balik, tidak ada perubahan yang dilakukan pada registri.

Contoh 2: Memulai dan menyelesaikan transaksi

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

Perintah ini dimulai lalu menyelesaikan transaksi. Tidak ada perubahan yang dilakukan pada registri hingga Complete-Transaction perintah digunakan.

Contoh 3: Gunakan preferensi putar kembali yang berbeda

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

Contoh ini menunjukkan efek mengubah nilai parameter RollbackPreference .

Dalam kumpulan perintah pertama, Start-Transaction tidak menggunakan RollbackPreference. Akibatnya, nilai default (Kesalahan) digunakan. Ketika kesalahan terjadi dalam perintah transaksi, yaitu, jalur yang ditentukan tidak ada, transaksi secara otomatis digulung balik.

Dalam kumpulan perintah kedua, Start-Transaction menggunakan RollbackPreference dengan nilai Never. Akibatnya, ketika kesalahan terjadi dalam perintah transaksi, transaksi masih aktif dan dapat diselesaikan dengan sukses.

Karena sebagian besar transaksi harus dilakukan tanpa kesalahan, nilai default RollbackPreference biasanya lebih disukai.

Contoh 4: Gunakan cmdlet ini saat transaksi sedang berlangsung

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

Contoh ini menunjukkan efek penggunaan Start-Transaction saat transaksi sedang berlangsung. Efeknya seperti bergabung dengan transaksi yang sedang berlangsung.

Meskipun ini adalah perintah yang disederhanakan, skenario ini sering terjadi ketika transaksi melibatkan menjalankan skrip yang mencakup transaksi lengkap.

Perintah pertama Start-Transaction memulai transaksi. Perintah pertama New-Item adalah bagian dari transaksi.

Perintah kedua Start-Transaction menambahkan pelanggan baru ke transaksi. Get-Transaction Perintah sekarang mengembalikan transaksi dengan jumlah pelanggan 2. Perintah kedua New-Item adalah bagian dari transaksi yang sama.

Tidak ada perubahan yang dilakukan pada registri sampai seluruh transaksi selesai. Untuk menyelesaikan transaksi, Anda harus memasukkan dua Complete-Transaction perintah, satu untuk setiap pelanggan. Jika Anda menggulung balik transaksi kapan saja, semua transaksi akan digulung balik untuk kedua pelanggan.

Contoh 5: Memulai transaksi independen saat transaksi sedang berlangsung

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}

Contoh ini menunjukkan efek penggunaan parameter Start-Transaction Independen untuk memulai transaksi saat transaksi lain sedang berlangsung. Dalam hal ini, transaksi baru digulung balik tanpa memengaruhi transaksi asli.

Meskipun transaksi secara logis independen, karena hanya satu transaksi yang dapat aktif pada satu waktu, Anda harus menggulung balik atau melakukan transaksi terbaru sebelum meneruskan pekerjaan pada transaksi asli.

Sekumpulan perintah pertama memulai transaksi. Perintah New-Item adalah bagian dari transaksi pertama.

Dalam kumpulan perintah kedua, Start-Transaction perintah menggunakan parameter Independen . Get-Transaction Perintah berikut menunjukkan objek transaksi untuk transaksi aktif, yang merupakan yang terbaru. Jumlah pelanggan sama dengan 1, yang menunjukkan bahwa transaksi tidak terkait.

Ketika transaksi aktif digulung balik dengan menggunakan Undo-Transaction perintah, transaksi asli menjadi aktif lagi.

New-ItemProperty Perintah, yang merupakan bagian dari transaksi asli, selesai tanpa kesalahan, dan transaksi asli dapat diselesaikan dengan menggunakan Complete-Transaction perintah . Akibatnya, registri diubah.

Contoh 6: Jalankan perintah yang bukan bagian dari transaksi

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

Contoh ini menunjukkan bahwa perintah yang dikirimkan saat transaksi sedang berlangsung dapat disertakan dalam transaksi atau tidak disertakan. Hanya perintah yang menggunakan parameter UseTransaction yang merupakan bagian dari transaksi.

Perintah pertama dan ketiga New-Item menggunakan parameter UseTransaction . Perintah ini adalah bagian dari transaksi. Karena perintah kedua New-Item tidak menggunakan parameter UseTransaction , perintah tersebut bukan bagian dari transaksi.

Perintah Get-ChildItem pertama menunjukkan efeknya. Perintah kedua New-Item segera diselesaikan, tetapi perintah pertama dan ketiga New-Item tidak efektif sampai transaksi dilakukan.

Perintah Complete-Transaction menerapkan transaksi. Akibatnya, perintah Get-ChildItem kedua menunjukkan bahwa semua item baru ditambahkan ke registri.

Contoh 7: Mengembalikan transaksi yang tidak selesai dalam waktu tertentu

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

Perintah ini menggunakan parameter Start-Transaction Batas Waktu untuk memulai transaksi yang harus diselesaikan dalam waktu dua menit. Jika transaksi belum selesai ketika waktu habis kedaluwarsa, transaksi akan digulung balik secara otomatis.

Ketika waktu habis kedaluwarsa, Anda tidak diberi tahu, tetapi properti Status objek transaksi diatur ke RolledBack dan perintah yang menggunakan parameter UseTransaction gagal.

Parameter

-Confirm

Meminta Anda mengonfirmasi sebelum menjalankan cmdlet.

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

-Independent

Menunjukkan bahwa cmdlet ini memulai transaksi yang independen dari transaksi apa pun yang sedang berlangsung. Secara default, jika Anda menggunakan Start-Transaction saat transaksi lain sedang berlangsung, pelanggan baru ditambahkan ke transaksi yang sedang berlangsung. Parameter ini hanya berpengaruh ketika transaksi sudah berlangsung dalam sesi.

Secara default, jika Anda menggunakan Start-Transaction saat transaksi sedang berlangsung, objek transaksi yang ada digunakan kembali dan jumlah pelanggan bertambah. Efeknya mirip dengan bergabung dengan transaksi asli. Perintah Undo-Transaction menggulung balik seluruh transaksi. Untuk menyelesaikan transaksi, Anda harus memasukkan Complete-Transaction perintah untuk setiap pelanggan. Karena sebagian besar transaksi yang sedang berlangsung pada saat yang sama terkait, defaultnya cukup untuk sebagian besar penggunaan.

Jika Anda menentukan parameter Independen , cmdlet ini membuat transaksi baru yang dapat diselesaikan atau dibatalkan tanpa memengaruhi transaksi asli. Namun, karena hanya satu transaksi yang dapat aktif pada satu waktu, Anda harus menyelesaikan atau mengembalikan transaksi baru sebelum meneruskan pekerjaan pada transaksi asli.

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

-RollbackPreference

Menentukan kondisi di mana transaksi secara otomatis digulung balik. Nilai yang dapat diterima untuk parameter ini adalah:

  • Error Transaksi digulung balik secara otomatis jika terjadi kesalahan mengakhiri atau tidak mengakhiri kesalahan.
  • TerminatingError Transaksi digulung balik secara otomatis jika terjadi kesalahan penghentian.
  • Never Transaksi tidak pernah digulung balik secara otomatis.

Nilai defaultnya adalah Error.

Type:RollbackSeverity
Accepted values:Error, TerminatingError, Never
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Timeout

Menentukan waktu maksimum, dalam menit, bahwa transaksi aktif. Ketika waktu habis kedaluwarsa, transaksi secara otomatis digulung balik.

Secara default, tidak ada waktu habis untuk transaksi yang dimulai di baris perintah. Ketika transaksi dimulai oleh skrip, waktu habis default adalah 30 menit.

Type:Int32
Aliases:TimeoutMins
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WhatIf

Menunjukkan apa yang akan terjadi jika cmdlet berjalan. Cmdlet tidak dijalankan.

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

Input

None

Anda tidak dapat menyalurkan input ke cmdlet ini.

Output

None

Cmdlet ini tidak menghasilkan output apa pun.