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 diaktifkan
  • Hide 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
}

Lihat juga