Bagikan melalui


Start-Transaction

Memulai transaksi.

Sintaks

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

Deskripsi

cmdlet Start-Transaction 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.

cmdlet Start-Transaction 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 perintah Complete-Transaction 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 Start-Transaction pertama memulai transaksi. Perintah New-Item pertama adalah bagian dari transaksi.

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

Tidak ada perubahan yang dilakukan pada registri sampai seluruh transaksi selesai. Untuk menyelesaikan transaksi, Anda harus memasukkan dua perintah Complete-Transaction, 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 independenStart-Transaction 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, perintah Start-Transaction menggunakan parameter Independen. Perintah Get-Transaction yang mengikuti 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 perintah Undo-Transaction, transaksi asli menjadi aktif lagi.

Perintah New-ItemProperty, yang merupakan bagian dari transaksi asli, selesai tanpa kesalahan, dan transaksi asli dapat diselesaikan dengan menggunakan perintah Complete-Transaction. 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 New-Item pertama dan ketiga menggunakan parameter UseTransaction. Perintah ini adalah bagian dari transaksi. Karena perintah New-Item kedua tidak menggunakan parameter UseTransaction, perintah tersebut bukan bagian dari transaksi.

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

Perintah Complete-Transaction melakukan 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 TimeoutStart-Transaction 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, Anda tidak diberi tahu, tetapi properti Status objek transaksi diatur ke RolledBack dan perintah yang menggunakan parameter UseTransaction gagal.

Parameter

-Confirm

Meminta konfirmasi sebelum menjalankan cmdlet.

Jenis:SwitchParameter
Alias:cf
Position:Named
Nilai default:False
Diperlukan:False
Terima input alur:False
Terima karakter wildcard: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 mengembalikan seluruh transaksi. Untuk menyelesaikan transaksi, Anda harus memasukkan perintah Complete-Transaction 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.

Jenis:SwitchParameter
Position:Named
Nilai default:None
Diperlukan:False
Terima input alur:False
Terima karakter wildcard: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.
  • TerminatingError Transaksi digulung balik secara otomatis jika terjadi kesalahan penghentian.
  • Never Transaksi tidak pernah digulung balik secara otomatis.

Nilai defaultnya adalah Error.

Jenis:RollbackSeverity
Nilai yang diterima:Error, TerminatingError, Never
Position:Named
Nilai default:None
Diperlukan:False
Terima input alur:False
Terima karakter wildcard: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.

Jenis:Int32
Alias:TimeoutMins
Position:Named
Nilai default:None
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-WhatIf

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

Jenis:SwitchParameter
Alias:wi
Position:Named
Nilai default:False
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

Input

None

Anda tidak dapat menyalurkan input ke cmdlet ini.

Output

None

Cmdlet ini tidak menghasilkan output apa pun.