about_Experimental_Features
Dukungan Fitur Eksperimental di PowerShell menyediakan mekanisme untuk fitur eksperimental agar hidup berdampingan dengan fitur stabil yang ada di modul PowerShell atau PowerShell.
Fitur eksperimental adalah salah satu tempat desain tidak diselesaikan. Fitur ini tersedia bagi pengguna untuk menguji dan memberikan umpan balik. Setelah fitur eksperimental diselesaikan, perubahan desain menjadi perubahan yang melanggar. Fitur eksperimental tidak dimaksudkan untuk digunakan dalam produksi karena perubahan diizinkan untuk melanggar.
Fitur eksperimental dinonaktifkan secara default dan perlu diaktifkan secara eksplisit oleh pengguna atau administrator sistem.
Fitur eksperimental yang diaktifkan tercantum dalam powershell.config.json
file untuk $PSHOME
semua pengguna atau file konfigurasi khusus pengguna untuk pengguna tertentu.
Catatan
Fitur eksperimental yang diaktifkan dalam file konfigurasi pengguna lebih diutamakan daripada fitur eksperimental yang tercantum dalam file konfigurasi sistem.
Atribut Eksperimental
Experimental
Gunakan atribut untuk mendeklarasikan beberapa kode sebagai eksperimental.
Gunakan sintaks berikut untuk mendeklarasikan Experimental
atribut yang memberikan nama fitur eksperimental dan tindakan yang harus diambil jika fitur eksperimental diaktifkan:
[Experimental(NameOfExperimentalFeature, ExperimentAction)]
Untuk modul, NameOfExperimentalFeature
harus mengikuti bentuk <modulename>.<experimentname>
. Parameter ExperimentAction
harus ditentukan dan satu-satunya nilai yang valid adalah:
Show
berarti menampilkan fitur eksperimental ini jika fitur diaktifkanHide
berarti menyembunyikan fitur eksperimental ini jika fitur diaktifkan
Mendeklarasikan Fitur Eksperimental dalam Modul yang Ditulis dalam C#
Penulis modul yang ingin menggunakan bendera Fitur Eksperimental dapat mendeklarasikan cmdlet sebagai eksperimental dengan menggunakan Experimental
atribut .
[Experimental("MyWebCmdlets.PSWebCmdletV2", ExperimentAction.Show)]
[Cmdlet(Verbs.Invoke, "WebRequest")]
public class InvokeWebRequestCommandV2 : WebCmdletBaseV2 { ... }
Mendeklarasikan Fitur Eksperimental dalam Modul yang ditulis di PowerShell
Modul yang ditulis dalam PowerShell juga dapat menggunakan Experimental
atribut untuk mendeklarasikan cmdlet eksperimental:
function Enable-SSHRemoting {
[Experimental("MyRemoting.PSSSHRemoting", "Show")]
[CmdletBinding()]
param()
...
}
Metadata tentang fitur eksperimental disimpan dalam manifes modul. PrivateData.PSData.ExperimentalFeatures
Gunakan properti manifes modul untuk mengekspos fitur eksperimental dari modul. Properti ExperimentalFeatures
adalah array hashtable yang berisi nama dan deskripsi fitur.
Contohnya:
PrivateData = @{
PSData = @{
ExperimentalFeatures = @(
@{
Name = "PSWebCmdletV2"
Description = "Rewrite the web cmdlets for better performance"
},
@{
Name = "PSRestCmdletV2"
Description = "Rewrite the REST API cmdlets for better performance"
}
)
}
}
Fitur Eksperimental yang Saling Eksklusif
Ada kasus di mana fitur eksperimental tidak dapat berdampingan dengan fitur yang ada atau fitur eksperimental lainnya.
Misalnya, Anda dapat memiliki cmdlet eksperimental yang mengambil alih cmdlet yang ada. Dua versi tidak dapat hidup berdampingan. Pengaturan hanya ExperimentAction.Hide
memungkinkan salah satu dari dua cmdlet diaktifkan pada satu waktu.
Dalam contoh ini, kami membuat cmdlet eksperimental Invoke-WebRequest
baru.
InvokeWebRequestCommand
berisi implementasi non-eksperimental.
InvokeWebRequestCommandV2
berisi versi eksperimental cmdlet.
Penggunaan ExperimentAction.Hide
hanya akan memungkinkan salah satu dari dua fitur diaktifkan pada satu waktu:
[Experimental("MyWebCmdlets.PSWebCmdletV2", ExperimentAction.Show)]
[Cmdlet(Verbs.Invoke, "WebRequest")]
public class InvokeWebRequestCommandV2 : WebCmdletBaseV2 { ... }
[Experimental("MyWebCmdlets.PSWebCmdletV2", ExperimentAction.Hide)]
[Cmdlet(Verbs.Invoke, "WebRequest")]
public class InvokeWebRequestCommand : WebCmdletBase { ... }
MyWebCmdlets.PSWebCmdletV2
Ketika fitur eksperimental diaktifkan, implementasi yang ada InvokeWebRequestCommand
disembunyikan dan InvokeWebRequestCommandV2
menyediakan implementasi Invoke-WebRequest
.
Ini memungkinkan pengguna untuk mencoba cmdlet baru dan memberikan umpan balik lalu kembali ke versi non-eksperimental saat diperlukan.
Parameter Eksperimental dalam Cmdlet
Atribut Experimental
juga dapat diterapkan ke parameter individual. Ini memungkinkan Anda membuat serangkaian parameter eksperimental untuk cmdlet yang ada daripada cmdlet yang sama sekali baru.
Berikut adalah contoh dalam C#:
[Experimental("MyModule.PSNewAddTypeCompilation", ExperimentAction.Show)]
[Parameter(ParameterSet = "NewCompilation")]
public CompilationParameters CompileParameters { ... }
[Experimental("MyModule.PSNewAddTypeCompilation", ExperimentAction.Hide)]
[Parameter()]
public CodeDom CodeDom { ... }
Berikut adalah contoh yang berbeda dalam skrip PowerShell:
param(
[Experimental("MyModule.PSNewFeature", "Show")]
[string] $NewName,
[Experimental("MyModule.PSNewFeature", "Hide")]
[string] $OldName
)
Memeriksa apakah Fitur Eksperimental Diaktifkan
Dalam kode, Anda harus memeriksa apakah fitur eksperimental Diaktifkan sebelum mengambil tindakan yang sesuai. Anda dapat menentukan apakah fitur eksperimental diaktifkan menggunakan metode statis IsEnabled()
pada System.Management.Automation.ExperimentalFeature
kelas .
Berikut adalah contoh dalam C#:
if (ExperimentalFeature.IsEnabled("MyModule.MyExperimentalFeature"))
{
// code specific to the experimental feature
}
Berikut adalah contoh dalam skrip PowerShell:
if ([ExperimentalFeature]::IsEnabled("MyModule.MyExperimentalFeature"))
{
# code specific to the experimental feature
}