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 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
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 Legacy
Standard
, 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.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk