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…
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 Eksperimental menunjukkan bahwa fitur eksperimental tersedia dalam versi PowerShell
  • Ikon Mainstream menunjukkan versi PowerShell di mana fitur eksperimental menjadi mainstream
  • Ikon Dihentikan menunjukkan versi PowerShell tempat fitur eksperimental dihapus
Nama 7.2 7.3 7.4 7.5 (pratinjau)
PSCommandNotFoundSuggestion Eksperimental Eksperimental Eksperimental Eksperimental
PSDesiredStateConfiguration.InvokeDscResource Eksperimental Eksperimental Eksperimental Eksperimental
PSNativePSPathResolution Eksperimental Dihentikan
PSSubsystemPluginModel Eksperimental Eksperimental Eksperimental Eksperimental
PSNativeCommandArgumentPassing Eksperimental Mainstream
PSAnsiRenderingFileInfo Eksperimental Mainstream
PSLoadAssemblyFromNativeCode Eksperimental Eksperimental Eksperimental Eksperimental
PSNativeCommandErrorActionPreference Eksperimental Mainstream
PSFeedbackProvider Eksperimental Eksperimental
PSModuleAutoLoadSkipOfflineFiles Eksperimental Eksperimental
PSCommandWithArgs Eksperimental Eksperimental
PSNativeWindowsTildeExpansion Eksperimental

PSAnsiRenderingFileInfo

Catatan

Fitur ini menjadi mainstream di PowerShell 7.3.

Fitur pemformatan ANSI ditambahkan di PowerShell 7.2. Fitur ini menambahkan $PSStyle.FileInfo anggota dan memungkinkan pewarnaan jenis file tertentu.

  • $PSStyle.FileInfo.Directory - Anggota bawaan untuk menentukan warna untuk direktori
  • $PSStyle.FileInfo.SymbolicLink - Anggota bawaan untuk menentukan warna untuk tautan simbolis
  • $PSStyle.FileInfo.Executable - Anggota bawaan untuk menentukan warna untuk executable.
  • $PSStyle.FileInfo.Extension - Gunakan anggota ini untuk menentukan warna untuk ekstensi file yang berbeda. Anggota Ekstensi telah menyertakan ekstensi untuk file arsip dan PowerShell.

Untuk informasi selengkapnya, lihat about_Automatic_Variables.

PSCommandNotFoundSuggestion

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

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

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.

PSNativeCommandArgumentPassing

Catatan

Fitur ini menjadi mainstream di PowerShell 7.3.

Ketika fitur eksperimental ini diaktifkan PowerShell menggunakan properti StartProcessInfo objek daripada mekanisme rekonstruksi ArgumentList string kami saat ini saat memanggil executable asli.

Perhatian

Perilaku baru adalah perubahan yang melanggar dari perilaku saat ini. Ini dapat merusak skrip dan otomatisasi yang mengatasi berbagai masalah saat memanggil aplikasi asli. Secara historis, tanda kutip harus diloloskan dan tidak dimungkinkan untuk memberikan argumen kosong ke aplikasi asli. Gunakan token stop-parsing (--%) atau Start-Process cmdlet untuk melewati argumen asli sidestep saat diperlukan.

Fitur ini menambahkan variabel preferensi baru $PSNativeCommandArgumentPassing yang mengontrol perilaku ini. Variabel ini memungkinkan Anda untuk memilih perilaku saat runtime. Nilai yang valid adalah Legacy, Standard, dan Windows. Perilaku defaultnya adalah platform khusus. Pada platform Windows, pengaturan defaultnya adalah Windows dan platform non-Windows default ke Standard.

Legacy adalah perilaku bersejarah. Perilaku Windows mode dan Standard sama kecuali, dalam Windows mode, pemanggilan file berikut secara otomatis menggunakan Legacy argumen gaya yang melewati.

  • cmd.exe
  • find.exe
  • cscript.exe
  • wscript.exe
  • sqlcmd.exe - Ditambahkan di PowerShell 7.3.1
  • diakhir dengan .bat
  • diakhir dengan .cmd
  • diakhir dengan .js
  • diakhir dengan .vbs
  • diakhir dengan .wsf

$PSNativeCommandArgumentPassing Jika diatur ke atau LegacyStandard, pengurai tidak memeriksa file-file ini.

Perilaku defaultnya adalah platform khusus. Pada platform Windows, pengaturan defaultnya adalah Windows dan platform non-Windows adalah Standard.

Catatan

Contoh berikut menggunakan alat ini TestExe.exe . Anda dapat membuat TestExe dari kode sumber. Lihat TestExe di repositori sumber PowerShell.

Perilaku baru yang disediakan oleh perubahan ini:

  • String harfiah atau dapat diperluas dengan tanda kutip yang disematkan, tanda kutip dipertahankan:

    PS> $a = 'a" "b'
    PS> TestExe -echoargs $a 'c" "d' e" "f
    Arg 0 is <a" "b>
    Arg 1 is <c" "d>
    Arg 2 is <e f>
    
  • String kosong sebagai argumen dipertahankan:

    PS> TestExe -echoargs '' a b ''
    Arg 0 is <>
    Arg 1 is <a>
    Arg 2 is <b>
    Arg 3 is <>
    

Untuk contoh perilaku baru lainnya, lihat about_Parsing.

PowerShell 7.3 juga menambahkan kemampuan untuk melacak pengikatan parameter untuk perintah asli. Untuk informasi selengkapnya, lihat Trace-Command.

PSNativeCommandErrorActionPreference

Catatan

Fitur ini menjadi mainstream di PowerShell 7.4.

Perintah asli biasanya mengembalikan kode keluar ke aplikasi panggilan yang nol untuk keberhasilan atau bukan nol untuk kegagalan. Namun, perintah asli saat ini tidak berpartisipasi dalam aliran kesalahan PowerShell. Output stderr yang dialihkan tidak ditafsirkan sama dengan aliran kesalahan PowerShell. Banyak perintah asli menggunakan stderr sebagai informasi atau aliran verbose, sehingga hanya kode keluar yang penting. Pengguna yang bekerja dengan perintah asli dalam skrip mereka perlu memeriksa status keluar setelah setiap panggilan menggunakan mirip dengan contoh berikut:

if ($LASTEXITCODE -ne 0) {
    throw "Command failed. See above errors for details"
}

Namun, contoh ini tidak mendukung semua kasus di mana $? dapat salah dari cmdlet atau kesalahan fungsi, membuat $LASTEXITCODE kedaluarsa.

Fitur ini mengimplementasikan $PSNativeCommandUseErrorActionPreference variabel preferensi yang mengontrol bagaimana kesalahan perintah asli ditangani di PowerShell. Ini memungkinkan kegagalan perintah asli untuk menghasilkan objek kesalahan yang ditambahkan ke aliran kesalahan PowerShell dan dapat mengakhiri eksekusi skrip tanpa penanganan tambahan.

$PSNativeCommandUseErrorActionPreference diatur ke $false secara default. Dengan preferensi diatur ke $true Anda mendapatkan perilaku berikut:

  • Ketika $ErrorActionPreference = 'Stop', skrip akan rusak ketika perintah asli mengembalikan kode keluar bukan nol.
  • Ketika $ErrorActionPreference = 'Continue' (default), Anda akan melihat pesan kesalahan PowerShell untuk kesalahan perintah asli, tetapi skrip tidak akan rusak.

PSNativePSPathResolution

Catatan

Fitur eksperimental ini dihapus di PowerShell 7.3 dan tidak lagi didukung.

Jika jalur PSDrive yang menggunakan penyedia FileSystem diteruskan ke perintah asli, jalur file yang diselesaikan diteruskan ke perintah asli. Ini berarti perintah seperti code temp:/test.txt sekarang berfungsi seperti yang diharapkan.

Selain itu, di Windows, jika jalur dimulai dengan ~, yang diselesaikan ke jalur lengkap dan diteruskan ke perintah asli. Dalam kedua kasus, jalur dinormalisasi ke pemisah direktori untuk sistem operasi yang relevan.

  • Jika jalur bukan PSDrive atau ~ (di Windows), maka normalisasi jalur tidak terjadi
  • Jika jalur dalam tanda kutip tunggal, maka jalur tersebut tidak diselesaikan dan diperlakukan sebagai harfiah

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.