Menggunakan Fitur Eksperimental di PowerShell
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 fitur di mana desain tidak diselesaikan. Fitur ini tersedia bagi pengguna untuk menguji dan memberikan umpan balik. Setelah fitur eksperimental diselesaikan, perubahan desain menjadi perubahan yang melanggar.
Perhatian
Fitur eksperimental tidak dimaksudkan untuk digunakan dalam produksi karena perubahan diizinkan untuk melanggar. Fitur eksperimental tidak didukung secara resmi. Namun, kami menghargai umpan balik dan laporan bug. Anda dapat mengajukan masalah di repositori sumber GitHub.
Untuk informasi selengkapnya tentang mengaktifkan atau menonaktifkan fitur-fitur ini, lihat about_Experimental_Features.
Siklus hidup fitur eksperimental
Cmdlet Get-ExperimentalFeature mengembalikan semua fitur eksperimental yang tersedia untuk PowerShell.
Fitur eksperimental dapat berasal dari modul atau mesin PowerShell. Fitur eksperimental berbasis modul hanya tersedia setelah Anda mengimpor modul. Dalam contoh berikut, PSDesiredStateConfiguration tidak dimuat, sehingga PSDesiredStateConfiguration.InvokeDscResource
fitur tidak tersedia.
Get-ExperimentalFeature
Name Enabled Source Description
---- ------- ------ -----------
PSCommandNotFoundSuggestion False PSEngine Recommend potential commands based on fuzzy searc…
PSCommandWithArgs False PSEngine Enable `-CommandWithArgs` parameter for pwsh
PSFeedbackProvider True PSEngine Replace the hard-coded suggestion framework with …
PSLoadAssemblyFromNativeCode False PSEngine Expose an API to allow assembly loading from nati…
PSModuleAutoLoadSkipOfflineFiles True PSEngine Module discovery will skip over files that are ma…
PSSerializeJSONLongEnumAsNumber True PSEngine Serialize enums based on long or ulong as an nume…
PSSubsystemPluginModel True PSEngine A plugin model for registering and un-registering…
Gunakan cmdlet Enable-ExperimentalFeature dan Disable-ExperimentalFeature untuk mengaktifkan atau menonaktifkan fitur. Anda harus memulai sesi PowerShell baru agar perubahan ini berlaku. Jalankan perintah berikut untuk mengaktifkan PSCommandNotFoundSuggestion
fitur:
Enable-ExperimentalFeature PSCommandNotFoundSuggestion
WARNING: Enabling and disabling experimental features do not take effect until next start
of PowerShell.
Ketika fitur eksperimental menjadi mainstream, fitur ini tidak lagi tersedia sebagai fitur eksperimental karena fungsionalitasnya sekarang menjadi bagian dari mesin atau modul PowerShell. Misalnya, fitur ini PSAnsiRenderingFileInfo
menjadi mainstream di PowerShell 7.3. Anda mendapatkan fungsionalitas fitur secara otomatis.
Catatan
Beberapa fitur memiliki persyaratan konfigurasi, seperti variabel preferensi, yang harus diatur untuk mendapatkan hasil yang diinginkan dari fitur tersebut.
Saat fitur eksperimental dihentikan, fitur tersebut tidak lagi tersedia di PowerShell. Misalnya, PSNativePSPathResolution
fitur dihentikan di PowerShell 7.3.
Fitur yang tersedia
Artikel ini menjelaskan fitur eksperimental yang tersedia dan cara menggunakan fitur tersebut.
Legenda
- Ikon
menunjukkan bahwa fitur eksperimental tersedia dalam versi PowerShell
- Ikon
menunjukkan versi PowerShell di mana fitur eksperimental menjadi mainstream
- Ikon
menunjukkan versi PowerShell tempat fitur eksperimental dihapus
PSCommandNotFoundSuggestion
Catatan
Fitur ini menjadi mainstream di PowerShell 7.5-preview.5.
Merekomendasikan perintah potensial berdasarkan pencarian pencocokan fuzzy setelah CommandNotFoundException.
PS> get
get: The term 'get' isn't recognized as the name of a cmdlet, function, script file,
or operable program. Check the spelling of the name, or if a path was included, verify
that the path is correct and try again.
Suggestion [4,General]: The most similar commands are: set, del, ft, gal, gbp, gc, gci,
gcm, gdr, gcs.
PSCommandWithArgs
Catatan
Fitur ini menjadi mainstream di PowerShell 7.5-preview.5.
Fitur ini memungkinkan -CommandWithArgs
parameter untuk pwsh
. Parameter ini memungkinkan Anda menjalankan perintah PowerShell dengan argumen. Tidak seperti -Command
, parameter ini mengisi variabel bawaan $args
yang dapat digunakan oleh perintah .
String pertama adalah perintah dan string berikutnya yang dibatasi oleh spasi putih adalah argumen.
Contohnya:
pwsh -CommandWithArgs '$args | % { "arg: $_" }' arg1 arg2
Contoh ini menghasilkan output berikut:
arg: arg1
arg: arg2
Fitur ini ditambahkan di PowerShell 7.4-preview.2.
PSDesiredStateConfiguration.InvokeDscResource
Memungkinkan kompilasi ke MOF pada sistem non-Windows dan memungkinkan penggunaan Invoke-DSCResource
tanpa LCM.
Dimulai dengan PowerShell 7.2, modul PSDesiredStateConfiguration dihapus dan fitur ini dinonaktifkan secara default. Untuk mengaktifkan fitur ini, Anda harus menginstal modul PSDesiredStateConfiguration v2.0.5 dari Galeri PowerShell dan mengaktifkan fitur tersebut.
DSC v3 tidak memiliki fitur eksperimental ini. DSC v3 hanya mendukung Invoke-DSCResource
dan tidak menggunakan atau mendukung kompilasi MOF. Untuk informasi selengkapnya, lihat Konfigurasi Status yang Diinginkan PowerShell v3.
PSFeedbackProvider
Saat Anda mengaktifkan fitur ini, PowerShell menggunakan penyedia umpan balik baru untuk memberi Anda umpan balik saat perintah tidak dapat ditemukan. Penyedia umpan balik dapat diperluas, dan dapat diimplementasikan oleh modul pihak ketiga. Penyedia umpan balik dapat digunakan oleh subsistem lain, seperti subsistem prediktor, untuk memberikan hasil IntelliSense prediktif.
Fitur ini mencakup dua penyedia umpan balik bawaan:
GeneralCommandErrorFeedback melayani fungsionalitas saran yang sama yang ada saat ini
UnixCommandNotFound, tersedia di Linux, memberikan umpan balik yang mirip dengan bash.
UnixCommandNotFound berfungsi sebagai penyedia umpan balik dan prediktor. Saran dari perintah yang tidak ditemukan digunakan baik untuk memberikan umpan balik ketika perintah tidak dapat ditemukan dalam eksekusi interaktif, dan untuk memberikan hasil IntelliSense prediktif untuk baris perintah berikutnya.
Fitur ini ditambahkan di PowerShell 7.4-preview.3.
PSLoadAssemblyFromNativeCode
Mengekspos API untuk memungkinkan pemuatan rakitan dari kode asli.
PSModuleAutoLoadSkipOfflineFiles
Catatan
Fitur ini menjadi mainstream di PowerShell 7.5-preview.5.
Dengan fitur ini diaktifkan, jika PSModulePath pengguna berisi folder dari penyedia cloud, seperti OneDrive, PowerShell tidak lagi memicu unduhan semua file yang terkandung dalam folder tersebut. File apa pun yang ditandai sebagai tidak diunduh dilewati. Pengguna yang menggunakan penyedia cloud untuk menyinkronkan modul mereka di antara mesin harus menandai folder modul sebagai Disematkan atau status yang setara untuk penyedia selain OneDrive. Menandai folder modul sebagai Disematkan memastikan bahwa file selalu disimpan di disk.
Fitur ini ditambahkan di PowerShell 7.4-preview.1.
PSRedirectToVariable
Catatan
Fitur eksperimental ini ditambahkan di PowerShell 7.5-preview.4.
Saat diaktifkan, fitur ini menambahkan dukungan untuk mengalihkan ke drive variabel. Fitur ini memungkinkan Anda mengalihkan data ke variabel menggunakan sintaks.variable:name
PowerShell memeriksa target pengalihan dan jika menggunakan penyedia variabel yang dipanggilnya Set-Variable
, bukan Out-File
.
Contoh berikut menunjukkan cara mengalihkan output perintah ke variabel:
. {
"Output 1"
Write-Warning "Warning, Warning!"
"Output 2"
} 3> variable:warnings
$warnings
Output 1
Output 2
WARNING: Warning, Warning!
PSSubsystemPluginModel
Fitur ini memungkinkan model plugin subsistem di PowerShell. Fitur ini memungkinkan untuk memisahkan komponen System.Management.Automation.dll
menjadi subsistem individu yang berada di rakitan mereka sendiri. Pemisahan ini mengurangi jejak disk mesin PowerShell inti dan memungkinkan komponen ini menjadi fitur opsional untuk penginstalan PowerShell minimal.
Saat ini, hanya subsistem CommandPredictor yang didukung. Subsistem ini digunakan bersama dengan modul PSReadLine untuk menyediakan plugin prediksi kustom. Di masa depan, Job, CommandCompleter, Remoting dan komponen lainnya dapat dipisahkan menjadi rakitan subsistem di luar . System.Management.Automation.dll
Fitur eksperimental mencakup cmdlet baru, Get-PSSubsystem. Cmdlet ini hanya tersedia ketika fitur diaktifkan. Cmdlet ini mengembalikan informasi tentang subsistem yang tersedia pada sistem.
PSNativeWindowsTildeExpansion
Ketika fitur ini diaktifkan, PowerShell memperluas tilde yang tidak dikutip (~
) ke folder beranda pengguna saat ini sebelum memanggil perintah asli. Contoh berikut menunjukkan cara kerja fitur.
Dengan fitur dinonaktifkan, tilde diteruskan ke perintah asli sebagai string harfiah.
PS> cmd.exe /c echo ~
~
Dengan fitur diaktifkan, PowerShell memperluas tilde sebelum diteruskan ke perintah asli.
PS> cmd.exe /c echo ~
C:\Users\username
Fitur ini hanya berlaku untuk Windows. Pada platform non-Windows, ekspansi tilde ditangani secara asli.
Fitur ini ditambahkan di PowerShell 7.5-preview.2.
PSSerializeJSONLongEnumAsNumber
Fitur ini memungkinkan cmdlet ConvertTo-Json untuk membuat serialisasi nilai enum apa pun berdasarkan Int64/long
atau UInt64/ulong
sebagai nilai numerik daripada representasi string dari nilai enum tersebut. Ini menyelaraskan perilaku serialisasi enum dengan jenis dasar enum lainnya di mana cmdlet menserialisasikan enum sebagai nilai numeriknya.
Gunakan parameter EnumsAsStrings untuk membuat serialisasi sebagai representasi string.
Contohnya:
# PSSerializeJSONLongEnumAsNumber disabled
@{
Key = [System.Management.Automation.Tracing.PowerShellTraceKeywords]::Cmdlets
} | ConvertTo-Json
# { "Key": "Cmdlets" }
# PSSerializeJSONLongEnumAsNumber enabled
@{
Key = [System.Management.Automation.Tracing.PowerShellTraceKeywords]::Cmdlets
} | ConvertTo-Json
# { "Key": 32 }
# -EnumsAsStrings to revert back to the old behaviour
@{
Key = [System.Management.Automation.Tracing.PowerShellTraceKeywords]::Cmdlets
} | ConvertTo-Json -EnumsAsStrings
# { "Key": "Cmdlets" }