Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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.
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 bukan berarti 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.
-
Start-Transaction
: Memulai transaksi baru. -
Use-Transaction
: Menambahkan perintah atau ekspresi ke transaksi. Perintah harus menggunakan objek yang diaktifkan transaksi. -
Undo-Transaction
: Menggulung balik transaksi sehingga tidak ada data yang diubah oleh transaksi. -
Complete-Transaction
: 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. Objek TransactedString berfungsi dengan sistem operasi apa pun yang menjalankan PowerShell.
Penyedia PowerShell lainnya dapat mendukung transaksi. Untuk menemukan penyedia PowerShell dalam sesi Anda yang mendukung transaksi, gunakan perintah berikut untuk menemukan nilai Transaksi di properti Kemampuan penyedia:
Get-PSProvider | Where-Object {$_.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
Parameter UseTransaction
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 pemutaran kembali saat Anda menggunakan
Start-Transaction
untuk memulai transaksi.Preferensi putar kembali menentukan kondisi di mana transaksi digulung balik secara otomatis. Nilai yang valid adalah
Error
,TerminatingError
, danNever
. Nilai defaultnya adalahError
.Status: Berisi status transaksi saat ini. Nilai yang valid adalah
Active
,Committed
, danRolledBack
.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 Get-Transaction
cmdlet. Saat Anda memasukkan Get-Transaction
perintah, 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 transaksi 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 Undo-Transaction
perintah pada titik mana pun mengembalikan seluruh transaksi untuk semua pelanggan.
Namun, untuk melakukan transaksi, Anda harus memasukkan Complete-Transaction
perintah untuk setiap pelanggan.
Untuk menemukan jumlah pelanggan untuk transaksi, periksa properti SubscriberCount dari objek transaksi. Misalnya, perintah berikut menggunakan Get-Transaction
cmdlet 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 cmdlet Start-Transaction
.
Saat Anda memulai transaksi independen, Start-Transaction
buat 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 berubah 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 Start-Transaction
cmdlet . 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 HKCU:
Perangkat Lunak drive, tidak disertakan dalam transaksi.
cd HKCU:\Software
Perintah berikut, yang membuat kunci MyCompany, menggunakan parameter UseTransaction 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 Complete-Transaction
cmdlet . Karena selalu memengaruhi transaksi aktif, Anda tidak dapat menentukan transaksi.
Complete-Transaction
Akibatnya, MyCompany
kunci ditambahkan ke registri.
dir m*
Hive: HKEY_CURRENT_USER\software
SKC VC Name Property
--- -- ---- --------
83 1 Microsoft {(default)}
0 0 MyCompany {}
Contoh 2: Mengembalikan transaksi
Untuk membuat transaksi, gunakan Start-Transaction
cmdlet . 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 Undo-Transaction
cmdlet. Karena selalu memengaruhi transaksi aktif, Anda tidak menentukan transaksi.
Undo-Transaction
Hasilnya adalah bahwa MyOtherCompany
kunci 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 Get-ChildItem
perintah (alias adalah dir
) untuk mempratinjau perubahan dalam transaksi.
Perintah berikut memulai transaksi.
Start-Transaction
Perintah berikut menggunakan cmdlet untuk menambahkan New-ItemProperty
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 Get-ChildItem
perintah (dir
) tanpa parameter UseTransaction. Perintah berikut mendapatkan item yang dimulai dengan "M."
dir m*
Hasilnya menunjukkan bahwa belum ada entri yang ditambahkan ke MyCompany
kunci.
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
83 1 Microsoft {(default)}
0 0 MyCompany {}
Untuk mempratinjau efek penerapan transaksi, masukkan Get-ChildItem
perintah (dir
) dengan parameter UseTransaction. Perintah ini memiliki tampilan data dari dalam transaksi.
dir m* -UseTransaction
Hasilnya menunjukkan bahwa, jika transaksi dilakukan, MyKey
entri ditambahkan ke MyCompany
kunci.
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 HKCU:\Software
kunci registri.
Start-Transaction
Tiga perintah berikutnya menggunakan New-Item
cmdlet 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 disertakan dalam transaksi, perintah tersebut akan segera berlaku.
New-Item MyCompany1 -UseTransaction
New-Item MyCompany2
New-Item MyCompany3 -UseTransaction
Untuk melihat status registri saat ini, gunakan Get-ChildItem
perintah (dir
) tanpa parameter UseTransaction. Perintah ini mendapatkan item yang dimulai dengan M
.
dir m*
Hasilnya menunjukkan bahwa MyCompany2
kunci ditambahkan ke registri, tetapi MyCompany1
kunci 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 HKCU:\Software
kunci registri.
Start-Transaction
Perintah berikut menggunakan cmdlet untuk menambahkan New-Item
kunci ke registriMyCompany
. Perintah menggunakan parameter UseTransaction (alias adalah usetx) untuk menyertakan perintah dalam transaksi.
New-Item MyCompany -usetx
MyCompany
Karena kunci 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 untuk mengubah preferensi.
Perintah berikut memulai transaksi dengan preferensi Never
putar kembali .
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 Use-Transaction
cmdlet
Use-Transaction
Cmdlet 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 berikut New-Object
membuat instans kelas TransactedString dan menyimpannya dalam $t
variabel.
$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 akan segera berlaku.
$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 ToString
metode 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 Use-Transaction
perintah.
Use-Transaction {$t.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 HKCU:\Software
kunci.
Start-Transaction
Perintah berikut menggunakan Get-Transaction
perintah 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 Start-Transaction
perintah 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 untuk menambahkan entri registri New-ItemProperty
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 (bukan 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 Complete-Transaction
perintah untuk setiap Start-Transaction
perintah.
Complete-Transaction
Perintah lain Get-Transaction
menunjukkan bahwa transaksi telah dilakukan.
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 0 Committed
Contoh 9: Mengelola transaksi independen
Ketika Anda memulai transaksi saat transaksi lain sedang berlangsung, Anda dapat menggunakan untuk membuat transaksi baru independen dari transaksi asli.
Saat Anda melakukannya, Start-Transaction
buat objek transaksi baru dan buat transaksi baru sebagai transaksi aktif.
Mulailah dengan memulai transaksi di HKCU:\Software
kunci.
Start-Transaction
Perintah berikut menggunakan Get-Transaction
perintah 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 untuk transaksi aktif.
Start-Transaction -Independent
Saat Anda membuat transaksi independen, transaksi baru (yang terakhir dibuat) menjadi transaksi aktif. Anda dapat menggunakan Get-Transaction
perintah 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 {}