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.
  • 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 ke stderr (#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 fitur PSNotApplyErrorActionToStderreksperimental .

  • Membuat $ErrorActionPreference tidak memengaruhi stderr 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 aktif Get-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 dengan Blah = "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 untuk Split-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 ke ScriptBlock delegasi (#10619)

    ScriptBlock Ketika dikonversi ke jenis delegasi yang akan digunakan dalam konteks C#, membungkus hasilnya membawa masalah yang PSObject tidak diperlukan:

    • Ketika nilai dikonversi ke jenis pengembalian delegasi, PSObject pada dasarnya akan dibongkar. Jadi yang PSObject tidak diperlukan.
    • Ketika jenis pengembalian delegasi adalah object, itu akan dibungkus dalam sehingga PSObject sulit untuk bekerja dengan dalam kode C#.

    Setelah perubahan ini, objek yang dikembalikan adalah objek yang mendasar.