about_Transactions
Deskripsi singkat
Menjelaskan cara mengelola operasi yang ditransaksikan di PowerShell.
Deskripsi panjang
Transaksi didukung di PowerShell yang dimulai di PowerShell 2.0. Fitur ini memungkinkan Anda memulai transaksi, untuk menunjukkan perintah mana yang merupakan bagian dari transaksi, dan untuk menerapkan atau mengembalikan transaksi.
TENTANG TRANSAKSI
Di PowerShell, transaksi adalah sekumpulan satu atau beberapa perintah yang dikelola sebagai unit logis. Transaksi dapat diselesaikan ("diterapkan"), yang mengubah data yang terpengaruh oleh transaksi. Atau, transaksi dapat sepenuhnya dibatalkan ("digulung balik") sehingga data yang terpengaruh tidak diubah oleh transaksi.
Karena perintah dalam transaksi dikelola sebagai unit, semua perintah diterapkan, atau semua perintah digulung balik.
Transaksi banyak digunakan dalam pemrosesan data, terutama dalam operasi database dan untuk transaksi keuangan. Transaksi paling sering digunakan ketika skenario terburuk untuk serangkaian perintah bukanlah bahwa semuanya gagal, tetapi beberapa perintah berhasil sementara yang lain gagal, meninggalkan sistem dalam keadaan rusak, salah, atau tidak dapat diinterpretase yang sulit diperbaiki.
CMDLET TRANSAKSI
PowerShell mencakup beberapa cmdlet yang dirancang untuk mengelola transaksi.
- Mulai Transaksi: Memulai transaksi baru.
- Use-Transaction: Menambahkan perintah atau ekspresi ke transaksi. Perintah harus menggunakan objek yang diaktifkan transaksi.
- Urungkan Transaksi: Mengembalikan transaksi sehingga tidak ada data yang diubah oleh transaksi.
- Transaksi Lengkap: Melakukan transaksi. Data yang terpengaruh oleh transaksi diubah.
- Get-Transaction: Mendapatkan informasi tentang transaksi aktif.
Untuk daftar cmdlet transaksi, ketik:
get-command *transaction
Untuk informasi terperinci tentang cmdlet, ketik:
get-help use-transaction -detailed
ELEMEN YANG DIAKTIFKAN TRANSAKSI
Untuk berpartisipasi dalam transaksi, cmdlet dan penyedia harus mendukung transaksi. Fitur ini dibangun ke dalam objek yang terpengaruh oleh transaksi.
Penyedia PowerShell Registry mendukung transaksi di Windows Vista. Objek TransactedString (Microsoft.PowerShell.Commands.Management.TransactedString) berfungsi dengan sistem operasi apa pun yang menjalankan PowerShell.
Penyedia PowerShell lainnya dapat mendukung transaksi. Untuk menemukan penyedia PowerShell di sesi Anda yang mendukung transaksi, gunakan perintah berikut untuk menemukan nilai "Transaksi" di properti Kemampuan penyedia:
get-psprovider | where {$_.Capabilities -like "*transactions*"}
Untuk informasi selengkapnya tentang penyedia, lihat Bantuan untuk penyedia. Untuk mendapatkan Bantuan penyedia, ketik:
get-help <provider-name>
Misalnya, untuk mendapatkan Bantuan untuk penyedia Registri, ketik:
get-help registry
THE USETRANSACTION PARAMETER
Cmdlet yang dapat mendukung transaksi memiliki parameter UseTransaction. Parameter ini mencakup perintah dalam transaksi aktif. Anda dapat menggunakan nama parameter lengkap atau aliasnya, "usetx".
Parameter hanya dapat digunakan ketika sesi berisi transaksi aktif. Jika Anda memasukkan perintah dengan parameter UseTransaction saat tidak ada transaksi aktif, perintah gagal.
Untuk menemukan cmdlet dengan parameter UseTransaction, ketik:
get-help * -parameter UseTransaction
Di inti PowerShell, semua cmdlet yang dirancang untuk bekerja dengan penyedia PowerShell mendukung transaksi. Akibatnya, Anda dapat menggunakan cmdlet penyedia untuk mengelola transaksi.
Untuk informasi selengkapnya tentang penyedia PowerShell, lihat about_Providers.
OBJEK TRANSAKSI
Transaksi diwakili dalam PowerShell oleh objek transaksi, System.Management.Automation.Transaction.
Objek memiliki properti berikut:
RollbackPreference: Berisi preferensi pembatalan yang ditetapkan untuk transaksi saat ini. Anda dapat mengatur preferensi pembatalan saat menggunakan Start-Transaction untuk memulai transaksi.
Preferensi putar kembali menentukan kondisi di mana transaksi digulung balik secara otomatis. Nilai yang valid adalah Error, TerminatingError, dan Never. Nilai defaultnya adalah Kesalahan.
Status: Berisi status transaksi saat ini. Nilai yang valid adalah Aktif, Berkomitmen, dan RolledBack.
SubscriberCount: Berisi jumlah pelanggan untuk transaksi. Pelanggan ditambahkan ke transaksi saat Anda memulai transaksi saat transaksi lain sedang berlangsung. Jumlah pelanggan dikurangi ketika pelanggan melakukan transaksi.
TRANSAKSI AKTIF
Di PowerShell, hanya satu transaksi yang aktif pada satu waktu, dan Anda hanya dapat mengelola transaksi aktif. Beberapa transaksi dapat berlangsung dalam sesi yang sama pada saat yang sama, tetapi hanya transaksi yang paling baru dimulai yang aktif.
Akibatnya, Anda tidak dapat menentukan transaksi tertentu saat menggunakan cmdlet transaksi. Perintah selalu berlaku untuk transaksi aktif.
Ini paling jelas dalam perilaku cmdlet Get-Transaction. Saat Anda memasukkan perintah Get-Transaction, Get-Transaction selalu hanya mendapatkan satu objek transaksi. Objek ini adalah objek yang mewakili transaksi aktif.
Untuk mengelola transaksi yang berbeda, Anda harus terlebih dahulu menyelesaikan transaksi aktif, baik dengan menerapkannya atau mengembalikannya. Ketika Anda melakukan ini, transaksi sebelumnya menjadi aktif secara otomatis. Transaksi menjadi aktif dalam urutan terbalik di mana mereka dimulai, sehingga transaksi yang paling baru dimulai selalu aktif.
PELANGGAN DAN TRANSAKSI INDEPENDEN
Jika Anda memulai transaksi saat transaksi lain sedang berlangsung, secara default, PowerShell tidak memulai transaksi baru. Sebaliknya, ia menambahkan "pelanggan" ke transaksi saat ini.
Ketika transaksi memiliki beberapa pelanggan, satu perintah Batalkan Transaksi pada titik mana pun mengembalikan seluruh transaksi untuk semua pelanggan. Namun, untuk melakukan transaksi, Anda harus memasukkan perintah Transaksi Lengkap untuk setiap pelanggan.
Untuk menemukan jumlah pelanggan untuk transaksi, periksa properti SubscriberCount dari objek transaksi. Misalnya, perintah berikut menggunakan cmdlet Get-Transaction untuk mendapatkan nilai properti SubscriberCount dari transaksi aktif:
(Get-Transaction).SubscriberCount
Menambahkan pelanggan adalah perilaku default karena sebagian besar transaksi yang dimulai saat transaksi lain sedang berlangsung terkait dengan transaksi asli. Dalam model umum, skrip yang berisi transaksi memanggil skrip pembantu yang berisi transaksinya sendiri. Karena transaksi terkait, transaksi harus digulung balik atau diterapkan sebagai unit.
Namun, Anda dapat memulai transaksi yang independen dari transaksi saat ini dengan menggunakan parameter Independen dari cmdlet Start-Transaction.
Saat Anda memulai transaksi independen, Transaksi Mulai membuat objek transaksi baru, dan transaksi baru menjadi transaksi aktif. Transaksi independen dapat dilakukan atau digulung balik tanpa memengaruhi transaksi asli.
Ketika transaksi independen selesai (diterapkan atau digulung balik), transaksi asli menjadi transaksi aktif lagi.
MENGUBAH DATA
Saat Anda menggunakan transaksi untuk mengubah data, data yang terpengaruh oleh transaksi tidak diubah hingga Anda melakukan transaksi. Namun, data yang sama dapat diubah oleh perintah yang bukan bagian dari transaksi.
Ingatlah hal ini saat Anda menggunakan transaksi untuk mengelola data bersama. Biasanya, database memiliki mekanisme yang mengunci data saat Anda mengerjakannya, mencegah pengguna lain, dan perintah, skrip, dan fungsi lainnya, mengubahnya.
Namun, kunci adalah fitur database. Ini tidak terkait dengan transaksi. Jika Anda bekerja dalam sistem file yang diaktifkan transaksi atau penyimpanan data lainnya, data dapat diubah saat transaksi sedang berlangsung.
Contoh
Contoh di bagian ini menggunakan penyedia PowerShell Registry dan mengasumsikan bahwa Anda terbiasa dengannya. Untuk informasi tentang penyedia Registri, ketik "get-help registry".
CONTOH 1: MELAKUKAN TRANSAKSI
Untuk membuat transaksi, gunakan cmdlet Start-Transaction. Perintah berikut memulai transaksi dengan pengaturan default.
start-transaction
Untuk menyertakan perintah dalam transaksi, gunakan parameter UseTransaction cmdlet. Secara default, perintah tidak disertakan dalam transaksi,
Misalnya, perintah berikut, yang mengatur lokasi saat ini di kunci Perangkat Lunak HKCU: drive, tidak termasuk dalam transaksi.
cd hkcu:\Software
Perintah berikut, yang membuat kunci MyCompany, menggunakan parameter UseTransaction dari cmdlet New-Item untuk menyertakan perintah dalam transaksi aktif.
new-item MyCompany -UseTransaction
Perintah mengembalikan objek yang mewakili kunci baru, tetapi karena perintah adalah bagian dari transaksi, registri belum diubah.
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
0 0 MyCompany {}
Untuk melakukan transaksi, gunakan cmdlet Complete-Transaction. Karena selalu memengaruhi transaksi aktif, Anda tidak dapat menentukan transaksi.
complete-transaction
Akibatnya, kunci MyCompany ditambahkan ke registri.
dir m*
Hive: HKEY_CURRENT_USER\software
SKC VC Name Property
--- -- ---- --------
83 1 Microsoft {(default)}
0 0 MyCompany {}
CONTOH 2: MENGGULUNG BALIK TRANSAKSI
Untuk membuat transaksi, gunakan cmdlet Start-Transaction. Perintah berikut memulai transaksi dengan pengaturan default.
start-transaction
Perintah berikut, yang membuat kunci MyOtherCompany, menggunakan parameter UseTransaction cmdlet New-Item untuk menyertakan perintah dalam transaksi aktif.
new-item MyOtherCompany -UseTransaction
Perintah mengembalikan objek yang mewakili kunci baru, tetapi karena perintah adalah bagian dari transaksi, registri belum diubah.
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
0 0 MyOtherCompany {}
Untuk mengembalikan transaksi, gunakan cmdlet Batalkan Transaksi. Karena selalu memengaruhi transaksi aktif, Anda tidak menentukan transaksi.
Undo-transaction
Hasilnya adalah bahwa kunci MyOtherCompany tidak ditambahkan ke registri.
dir m*
Hive: HKEY_CURRENT_USER\software
SKC VC Name Property
--- -- ---- --------
83 1 Microsoft {(default)}
0 0 MyCompany {}
CONTOH 3: MEMPRATINJAU TRANSAKSI
Biasanya, perintah yang digunakan dalam data perubahan transaksi. Namun, perintah yang mendapatkan data juga berguna dalam transaksi, karena mereka mendapatkan data di dalam transaksi. Ini menyediakan pratinjau perubahan yang melakukan transaksi akan menyebabkannya.
Contoh berikut menunjukkan cara menggunakan perintah Get-ChildItem (aliasnya adalah "dir") untuk mempratinjau perubahan dalam transaksi.
Perintah berikut memulai transaksi.
start-transaction
Perintah berikut menggunakan cmdlet New-ItemProperty untuk menambahkan entri registri MyKey ke kunci MyCompany. Perintah menggunakan parameter UseTransaction untuk menyertakan perintah dalam transaksi.
new-itemproperty -path MyCompany -Name MyKey -value 123 -UseTransaction
Perintah mengembalikan objek yang mewakili entri registri baru, tetapi entri registri tidak diubah.
MyKey
-----
123
Untuk mendapatkan item yang saat ini berada di registri, gunakan perintah Get-ChildItem ("dir") tanpa parameter UseTransaction. Perintah berikut mendapatkan item yang dimulai dengan "M."
dir m*
Hasilnya menunjukkan bahwa belum ada entri yang ditambahkan ke kunci MyCompany.
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
83 1 Microsoft {(default)}
0 0 MyCompany {}
Untuk mempratinjau efek penerapan transaksi, masukkan perintah Get-ChildItem ("dir") dengan parameter UseTransaction. Perintah ini memiliki tampilan data dari dalam transaksi.
dir m* -useTransaction
Hasilnya menunjukkan bahwa, jika transaksi dilakukan, entri MyKey akan ditambahkan ke kunci MyCompany.
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
83 1 Microsoft {(default)}
0 1 MyCompany {MyKey}
CONTOH 4: MENGGABUNGKAN PERINTAH YANG DITRANSAKSIKAN DAN TIDAK DITRANSAKSIKAN
Anda dapat memasukkan perintah yang tidak ditransaksikan selama transaksi. Perintah yang tidak ditransaksikan segera memengaruhi data, tetapi tidak memengaruhi transaksi. Perintah berikut memulai transaksi di kunci registri HKCU:\Software.
start-transaction
Tiga perintah berikutnya menggunakan cmdlet New-Item untuk menambahkan kunci ke registri. Perintah pertama dan ketiga menggunakan parameter UseTransaction untuk menyertakan perintah dalam transaksi. Perintah kedua menghilangkan parameter. Karena perintah kedua tidak termasuk dalam transaksi, perintah tersebut akan segera efektif.
new-item MyCompany1 -UseTransaction
new-item MyCompany2
new-item MyCompany3 -UseTransaction
Untuk melihat status registri saat ini, gunakan perintah Get-ChildItem ("dir") tanpa parameter UseTransaction. Perintah ini mendapatkan item yang dimulai dengan "M."
dir m*
Hasilnya menunjukkan bahwa kunci MyCompany2 ditambahkan ke registri, tetapi kunci MyCompany1 dan MyCompany3, yang merupakan bagian dari transaksi, tidak ditambahkan.
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
83 1 Microsoft {(default)}
0 0 MyCompany2 {}
Perintah berikut menerapkan transaksi.
complete-transaction
Sekarang, kunci yang ditambahkan sebagai bagian dari transaksi muncul di registri.
dir m*
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
83 1 Microsoft {(default)}
0 0 MyCompany1 {}
0 0 MyCompany2 {}
0 0 MyCompany3 {}
CONTOH 5: MENGGUNAKAN PUTAR KEMBALI OTOMATIS
Ketika perintah dalam transaksi menghasilkan kesalahan dalam bentuk apa pun, transaksi secara otomatis digulung balik.
Perilaku default ini dirancang untuk skrip yang menjalankan transaksi. Skrip biasanya diuji dengan baik dan menyertakan logika penanganan kesalahan, sehingga kesalahan tidak diharapkan dan harus mengakhiri transaksi.
Perintah pertama memulai transaksi di kunci registri HKCU:\Software.
start-transaction
Perintah berikut menggunakan cmdlet New-Item untuk menambahkan kunci MyCompany ke registri. Perintah menggunakan parameter UseTransaction (alias adalah "usetx") untuk menyertakan perintah dalam transaksi.
New-Item MyCompany -UseTX
Karena kunci MyCompany sudah ada di registri, perintah gagal, dan transaksi digulung balik.
New-Item : A key at this path already exists
At line:1 char:9
+ new-item <<<< MyCompany -usetx
Perintah Get-Transaction mengonfirmasi bahwa transaksi telah digulung balik dan bahwa SubscriberCount adalah 0.
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 0 RolledBack
CONTOH 6: MENGUBAH PREFERENSI PUTAR KEMBALI
Jika Anda ingin transaksi lebih toleran terhadap kesalahan, Anda dapat menggunakan parameter RollbackPreference Dari Start-Transaction untuk mengubah preferensi.
Perintah berikut memulai transaksi dengan preferensi pembatalan "Never".
start-transaction -rollbackpreference Never
Dalam hal ini, ketika perintah gagal, transaksi tidak secara otomatis digulung balik.
New-Item MyCompany -UseTX
New-Item : A key at this path already exists
At line:1 char:9
+ new-item <<<< MyCompany -usetx
Karena transaksi masih aktif, Anda dapat mengirim ulang perintah sebagai bagian dari transaksi.
New-Item MyOtherCompany -UseTX
CONTOH 7: MENGGUNAKAN CMDLET TRANSAKSI PENGGUNAAN
Cmdlet Use-Transaction memungkinkan Anda melakukan pembuatan skrip langsung terhadap objek Microsoft .NET Framework yang diaktifkan transaksi. Use-Transaction mengambil blok skrip yang hanya dapat berisi perintah dan ekspresi yang menggunakan objek .NET Framework berkemampuan transaksi, seperti instans kelas Microsoft.PowerShell.Commands.Management.TransactedString.
Perintah berikut memulai transaksi.
start-transaction
Perintah New-Object berikut membuat instans kelas TransactedString dan menyimpannya dalam variabel $t.
$t = New-Object Microsoft.PowerShell.Commands.Management.TransactedString
Perintah berikut menggunakan metode Tambahkan objek TransactedString untuk menambahkan teks ke string. Karena perintah bukan bagian dari transaksi, perubahan segera efektif.
$t.append("Windows")
Perintah berikut menggunakan metode Tambahkan yang sama untuk menambahkan teks, tetapi menambahkan teks sebagai bagian dari transaksi. Perintah diapit kurung kurawal, dan ditetapkan sebagai nilai parameter ScriptBlock dari Use-Transaction. Parameter UseTransaction (UseTx) diperlukan.
use-transaction {$t.append(" PowerShell")} -usetx
Untuk melihat konten string yang ditransaksikan saat ini di $t, gunakan metode ToString objek TransactedString.
$t.tostring()
Output menunjukkan bahwa hanya perubahan yang tidak ditransaksikan yang efektif.
Windows
Untuk melihat konten string yang ditransaksikan saat ini dalam $t dari dalam transaksi, sematkan ekspresi dalam perintah Gunakan-Transaksi.
use-transaction {$s.tostring()} -usetx
Output menunjukkan tampilan transaksi.
PowerShell
Perintah berikut menerapkan transaksi.
complete-transaction
Untuk melihat string akhir:
$t.tostring()
PowerShell
CONTOH 8: MENGELOLA TRANSAKSI MULTI-PELANGGAN
Saat Anda memulai transaksi saat transaksi lain sedang berlangsung, PowerShell tidak membuat transaksi kedua secara default. Sebaliknya, ia menambahkan pelanggan ke transaksi saat ini.
Contoh ini menunjukkan cara melihat dan mengelola transaksi multi-pelanggan.
Mulailah dengan memulai transaksi di kunci HKCU:\Software.
start-transaction
Perintah berikut menggunakan perintah Get-Transaction untuk mendapatkan transaksi aktif.
get-transaction
Hasilnya menunjukkan objek yang mewakili transaksi aktif.
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 1 Active
Perintah berikut menambahkan kunci MyCompany ke registri. Perintah menggunakan parameter UseTransaction untuk menyertakan perintah dalam transaksi.
new-item MyCompany -UseTransaction
Perintah berikut menggunakan perintah Mulai Transaksi untuk memulai transaksi. Meskipun perintah ini diketik pada prompt perintah, skenario ini lebih mungkin terjadi ketika Anda menjalankan skrip yang berisi transaksi.
start-transaction
Perintah Get-Transaction menunjukkan bahwa jumlah pelanggan pada objek transaksi bertahap. Nilainya sekarang 2.
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 2 Active
Perintah berikutnya menggunakan cmdlet New-ItemProperty untuk menambahkan entri registri MyKey ke kunci MyCompany. Ini menggunakan parameter UseTransaction untuk menyertakan perintah dalam transaksi.
new-itemproperty -path MyCompany -name MyKey -UseTransaction
Kunci MyCompany tidak ada di registri, tetapi perintah ini berhasil karena kedua perintah adalah bagian dari transaksi yang sama.
Perintah berikut menerapkan transaksi. Jika menggulung balik transaksi, transaksi akan digulung balik untuk semua pelanggan.
complete-transaction
Perintah Get-Transaction menunjukkan bahwa jumlah pelanggan pada objek transaksi adalah 1, tetapi nilai Status masih Aktif (tidak Diterapkan).
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 1 Active
Untuk menyelesaikan penerapan transaksi, masukkan perintah Selesai- Transaksi kedua. Untuk melakukan transaksi multi-pelanggan, Anda harus memasukkan satu perintah Complete-Transaction untuk setiap perintah Start-Transaction.
complete-transaction
Perintah Get-Transaction lainnya menunjukkan bahwa transaksi telah dilakukan.
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 0 Committed
CONTOH 9: MENGELOLA TRANSAKSI INDEPENDEN
Saat Anda memulai transaksi saat transaksi lain sedang berlangsung, Anda dapat menggunakan parameter Independen Dari Transaksi Mulai untuk membuat transaksi baru independen dari transaksi asli.
Saat Anda melakukannya, Start-Transaction membuat objek transaksi baru dan membuat transaksi baru sebagai transaksi aktif.
Mulailah dengan memulai transaksi di kunci HKCU:\Software.
start-transaction
Perintah berikut menggunakan perintah Get-Transaction untuk mendapatkan transaksi aktif.
get-transaction
Hasilnya menunjukkan objek yang mewakili transaksi aktif.
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 1 Active
Perintah berikut menambahkan kunci registri MyCompany sebagai bagian dari transaksi. Ini menggunakan parameter UseTransaction (UseTx) untuk menyertakan perintah dalam transaksi aktif.
new-item MyCompany -use
Perintah berikut memulai transaksi baru. Perintah menggunakan parameter Independen untuk menunjukkan bahwa transaksi ini bukan pelanggan transaksi aktif.
start-transaction -independent
Saat Anda membuat transaksi independen, transaksi baru (yang terakhir dibuat) menjadi transaksi aktif. Anda dapat menggunakan perintah Get-Transaction untuk mendapatkan transaksi aktif.
get-transaction
Perhatikan bahwa SubscriberCount dari transaksi adalah 1, menunjukkan bahwa tidak ada pelanggan lain dan bahwa transaksi tersebut baru.
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 1 Active
Transaksi baru harus selesai (berkomitmen atau digulung balik) sebelum Anda dapat mengelola transaksi asli.
Perintah berikut menambahkan kunci MyOtherCompany ke registri. Ini menggunakan parameter UseTransaction (UseTx) untuk menyertakan perintah dalam transaksi aktif.
new-item MyOtherCompany -usetx
Sekarang, gulung balik transaksi. Jika ada satu transaksi dengan dua pelanggan, menggulung balik transaksi akan mengembalikan seluruh transaksi untuk semua pelanggan.
Namun, karena transaksi ini independen, menggulirkan kembali transaksi terbaru membatalkan perubahan registri dan melakukan transaksi asli transaksi aktif.
undo-transaction
Perintah Get-Transaction mengonfirmasi bahwa transaksi asli masih aktif dalam sesi.
get-transaction
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 1 Active
Perintah berikut menerapkan transaksi aktif.
complete-transaction
Perintah Get-ChildItem menunjukkan bahwa registri telah diubah.
dir m*
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
83 1 Microsoft {(default)}
0 0 MyCompany {}