Apa yang Baru di PowerShell 7.1
Pada tanggal 11 November 2020, kami mengumumkan ketersediaan umum PowerShell 7.1. Dibangun di atas fondasi yang didirikan di PowerShell 7.0, upaya kami berfokus pada masalah komunitas dan mencakup sejumlah perbaikan dan perbaikan. Kami berkomitmen untuk memastikan bahwa PowerShell tetap menjadi platform yang stabil dan berkinerja.
PowerShell 7.1 menyertakan fitur, pembaruan, dan perubahan yang melanggar berikut.
- PSReadLine 2.1.0, yang mencakup Predictive IntelliSense
- PowerShell 7.1 telah diterbitkan ke Microsoft Store
- Paket penginstal diperbarui untuk versi OS baru dengan dukungan untuk ARM64
- 4 fitur eksperimental baru dan 2 fitur eksperimental yang dipromosikan ke mainstream
- Beberapa perubahan yang melanggar untuk meningkatkan kegunaan
Untuk daftar lengkap perubahan, lihat CHANGELOG di repositori GitHub.
PSReadLine 2.1.0
PowerShell 7.1 juga menyertakan PSReadLine 2.1.0. Versi ini mencakup Predictive IntelliSense. Untuk informasi selengkapnya tentang fitur Predictive IntelliSense, lihat pengumuman di blog PowerShell.
Paket alat penginstal Microsoft Store
PowerShell 7.1 telah diterbitkan ke Microsoft Store. Anda dapat menemukan rilis PowerShell di situs web Microsoft Store atau di aplikasi Store di Windows.
Manfaat paket Microsoft Store:
- Pembaruan otomatis yang dibangun langsung ke Windows
- Terintegrasi dengan mekanisme distribusi perangkat lunak lainnya seperti Intune dan SCCM
Catatan
Pengaturan konfigurasi tingkat sistem apa pun yang disimpan di $PSHOME
tidak dapat dimodifikasi. Ini termasuk konfigurasi WSMAN. Ini mencegah sesi jarak jauh menyambungkan ke instalasi PowerShell berbasis Store. Konfigurasi tingkat pengguna dan akses jauh SSH didukung.
Alat penginstal lainnya
Untuk informasi selengkapnya tentang sistem operasi yang didukung dan siklus hidup dukungan, lihat Siklus Hidup Dukungan PowerShell.
Periksa instruksi penginstalan untuk sistem operasi pilihan Anda:
Selain itu, PowerShell 7.1 mendukung rasa ARM32 dan ARM64 dari Debian, Ubuntu, dan ARM64 Alpine Linux.
Meskipun tidak didukung secara resmi, komunitas juga telah menyediakan paket untuk Arch dan Kali Linux.
Catatan
Debian 10+, CentOS 8+, Ubuntu 20.04, Alpine dan Arm saat ini tidak mendukung WinRM remoting. Untuk detail tentang menyiapkan akses jauh berbasis SSH, lihat PowerShell Remoting melalui SSH.
Fitur Eksperimental
Untuk informasi selengkapnya tentang Fitur Eksperimental, lihat Menggunakan Fitur Eksperimental.
Fitur eksperimental berikut sekarang menjadi fitur mainstream dalam rilis ini:
Fitur eksperimental berikut ditambahkan dalam rilis ini:
Microsoft.PowerShell.Utility.PSManageBreakpointsInRunspace
- PowerShell 7.1 memperluas fitur eksperimental ini untuk menambahkan parameter Runspace ke semua
*-PSBreakpoint
cmdlet. Parameter Runspace menentukan objek Runspace untuk berinteraksi dengan titik henti di runspace yang ditentukan.
- PowerShell 7.1 memperluas fitur eksperimental ini untuk menambahkan parameter Runspace ke semua
PSNativePSPathResolution - Fitur ini memungkinkan Anda meneruskan jalur penyedia PowerShell ke perintah asli yang tidak mendukung sintaks jalur PowerShell.
PSCultureInvariantReplaceOperator - Ketika operand sebelah kiri dalam
-replace
pernyataan operator bukan string, operand tersebut dikonversi menjadi string. Dengan fitur diaktifkan, konversi tidak menggunakan pengaturan Budaya untuk konversi string.PSSubsystemPluginModel meletakkan dasar untuk mendukung plug-in IntelliSense Prediktif di masa mendatang.
Melanggar Perubahan dan Penyempurnaan
Perilaku perbandingan string berubah di .NET 5.0
PowerShell 7.1 dibangun di .NET 5.0, yang memperkenalkan perubahan yang melanggar berikut:
Pada .NET 5.0, perbandingan string invarian budaya mengabaikan karakter kontrol non-pencetakan.
Misalnya, dua string berikut dianggap identik:
# Escape sequence "`a" is Ctrl-G or [char]7 'Food' -eq "Foo`ad"
True
Perbaikan
$?
agar tidak menjadi$false
ketika perintah asli menulis kestderr
(#13395)Adalah umum bagi perintah asli untuk menulis ke
stderr
tanpa berniat untuk menunjukkan kegagalan. Dengan perubahan$?
ini diatur ke$false
hanya ketika perintah asli juga memiliki kode keluar bukan nol. Perubahan ini tidak terkait dengan fiturPSNotApplyErrorActionToStderr
eksperimental .Membuat
$ErrorActionPreference
tidak memengaruhistderr
output perintah asli (#13361)Adalah umum bagi perintah asli untuk menulis ke
stderr
tanpa berniat untuk menunjukkan kegagalan. Dengan perubahan ini,stderr
output masih diambil dalam objek ErrorRecord , tetapi runtime tidak lagi berlaku$ErrorActionPreference
jika ErrorRecord berasal dari perintah asli.Ganti nama
-FromUnixTime
menjadi-UnixTimeSeconds
aktifGet-Date
untuk memungkinkan input waktu Unix (#13084) (Terima kasih @aetos382!)Parameter
-FromUnixTime
ditambahkan selama 7.1-preview.2. Parameter diganti namanya agar lebih cocok dengan jenis data. Parameter ini mengambil nilai bilangan bulat yang mewakili dalam detik sejak 1 Januari 1970, 0:00:00.Contoh ini mengonversi waktu Unix (diwakili oleh jumlah detik sejak 1970-01-01 0:00:00) menjadi DateTime.
Get-Date -UnixTimeSeconds 1577836800 Wednesday, January 01, 2020 12:00:00 AM
Izinkan parameter bernama yang ditentukan secara eksplisit untuk menggantikan parameter yang sama dari splatting hashtable (#13162)
Dengan perubahan ini, parameter bernama dari splatting dipindahkan ke akhir daftar parameter sehingga terikat setelah semua parameter bernama yang ditentukan secara eksplisit terikat. Pengikatan parameter untuk fungsi sederhana tidak melemparkan kesalahan ketika parameter bernama tertentu tidak dapat ditemukan. Parameter bernama yang tidak diketahui terikat ke
$args
parameter fungsi sederhana. Memindahkan splatting ke akhir daftar argumen mengubah urutan parameter muncul di$args
.Contohnya:
function SimpleTest { param( $Name, $Path ) "Name: $Name; Path: $Path; Args: $args" }
Dalam perilaku sebelumnya, MyPath tidak terikat
-Path
karena ini adalah argumen ketiga dalam daftar argumen. ## Jadi akhirnya diisi menjadi '$args' bersama denganBlah = "World"
PS> $hash = @{ Name = "Hello"; Blah = "World" } PS> SimpleTest @hash "MyPath" Name: Hello; Path: ; Args: -Blah: World MyPath
Dengan perubahan ini, argumen dari
@hash
dipindahkan ke akhir daftar argumen. MyPath menjadi argumen pertama dalam daftar, sehingga terikat ke-Path
.PS> SimpleTest @hash "MyPath" Name: Hello; Path: MyPath; Args: -Blah: World
Buat parameter
-Qualifier
switch tidak posisi untukSplit-Path
(#12960) (Terima kasih @yecril71pl!)Atasi direktori kerja sebagai jalur harfiah saat
Start-Process
tidak ditentukan (#11946) (Terima kasih @NoMoreFood!)Buat
-OutFile
parameter di cmdlet web berfungsi seperti-LiteralPath
(#11701) (Terima kasih @iSazonov!)Memperbaiki pengikatan parameter string untuk
BigInteger
literal numerik (#11634) (Terima kasih @vexx32!)Di Windows,
Start-Process
membuat lingkungan proses dengan semua variabel lingkungan dari sesi saat ini, menggunakan-UseNewEnvironment
menciptakan lingkungan proses default baru (#10830) (Terima kasih @iSazonov!)Jangan membungkus hasil
PSObject
pengembalian saat mengonversi keScriptBlock
delegasi (#10619)ScriptBlock
Ketika dikonversi ke jenis delegasi yang akan digunakan dalam konteks C#, membungkus hasilnya membawa masalah yangPSObject
tidak diperlukan:- Ketika nilai dikonversi ke jenis pengembalian delegasi,
PSObject
pada dasarnya akan dibongkar. Jadi yangPSObject
tidak diperlukan. - Ketika jenis pengembalian delegasi adalah
object
, itu akan dibungkus dalam sehinggaPSObject
sulit untuk bekerja dengan dalam kode C#.
Setelah perubahan ini, objek yang dikembalikan adalah objek yang mendasar.
- Ketika nilai dikonversi ke jenis pengembalian delegasi,