Bagikan melalui


Apa yang baru di PowerShell 7.1

Pada 11 November 2020 kami mengumumkan ketersediaan umum PowerShell 7.1. Membangun fondasi yang ditetapkan di PowerShell 7.0, upaya kami berfokus pada masalah komunitas dan mencakup sejumlah peningkatan dan perbaikan. Kami berkomitmen untuk memastikan bahwa PowerShell tetap menjadi platform yang stabil dan berkinerja.

PowerShell 7.1 menyertakan fitur, pembaruan, dan perubahan terbaru berikut.

  • PSReadLine 2.1.0, yang mencakup IntelliSense Prediktif
  • 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 arus utama
  • Beberapa perubahan merusak 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 termasuk IntelliSense Prediktif. Untuk informasi selengkapnya tentang fitur IntelliSense Prediktif, lihat pengumuman di blog PowerShell.

Paket 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 lain seperti Intune dan SCCM

Nota

Pengaturan konfigurasi tingkat sistem apa pun yang disimpan tidak $PSHOME dapat dimodifikasi. Ini termasuk konfigurasi WSMAN. Ini mencegah sesi jarak jauh tersambung ke instalasi PowerShell berbasis Store. Konfigurasi tingkat pengguna dan remoting SSH didukung.

Pemasang lainnya

Untuk informasi up-totanggal lebih lanjut tentang sistem operasi yang didukung dan siklus hidup dukungan, lihat Siklus Hidup Dukungan PowerShell.

Periksa petunjuk instalasi 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.

Nota

Debian 10+, CentOS 8+, Ubuntu 20.04, Alpine, dan Arm saat ini tidak mendukung jarak jauh WinRM. Untuk detail tentang menyiapkan jarak jauh berbasis SSH, lihat Jarak Jauh PowerShell melalui SSH.

Fitur Eksperimental

Untuk informasi selengkapnya tentang Fitur Eksperimental, lihat Menggunakan Fitur Eksperimental.

Fitur eksperimental berikut sekarang menjadi fitur utama 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 operan sebelah kiri dalam -replace pernyataan operator bukan string, operan tersebut dikonversi menjadi string. Dengan fitur yang diaktifkan, konversi tidak menggunakan setelan Budaya untuk konversi string.

  • PSSubsystemPluginModel meletakkan dasar untuk mendukung plug-in IntelliSense Prediktif di masa mendatang.

Perubahan dan Peningkatan Terbaru

  • Perilaku perbandingan string berubah di .NET 5.0

    PowerShell 7.1 dibangun di atas .NET 5.0, yang memperkenalkan perubahan besar 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
    
  • Memperbaiki $? agar tidak ketika $false perintah asli menulis ke stderr (#13395)

    Adalah umum bagi perintah native untuk menulis stderr tanpa bermaksud 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 .

  • Buat $ErrorActionPreference tidak memengaruhi stderr output perintah asli (#13361)

    Adalah umum bagi perintah native untuk menulis stderr tanpa bermaksud menunjukkan kegagalan. Dengan perubahan ini, stderr output masih ditangkap dalam objek ErrorRecord , tetapi runtime tidak lagi berlaku $ErrorActionPreference jika ErrorRecord berasal dari perintah asli.

  • Ganti nama -FromUnixTime menjadi -UnixTimeSeconds on Get-Date untuk mengizinkan input waktu Unix (#13084) (Terima kasih @aetos382!)

    Parameter ditambahkan -FromUnixTime 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 diikat. Pengikatan parameter untuk fungsi sederhana tidak memunculkan kesalahan ketika parameter bernama tertentu tidak dapat ditemukan. Parameter bernama yang tidak diketahui terikat pada $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 karena -Path ini adalah argumen ketiga dalam daftar argumen. ## Jadi akhirnya dimasukkan ke dalam '$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 pada -Path.

    PS> SimpleTest @hash "MyPath"
    Name: Hello; Path: MyPath; Args: -Blah: World
    
  • Membuat parameter -Qualifier sakelar tidak posisisional untuk Split-Path (#12960) (Terima kasih @yecril71pl!)

  • Selesaikan direktori kerja sebagai jalur literal ketika Start-Process tidak ditentukan (#11946) (Terima kasih @NoMoreFood!)

  • Buat -OutFile parameter di cmdlet web agar berfungsi seperti -LiteralPath (#11701) (Terima kasih @iSazonov!)

  • Perbaiki 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 pengembalian saat PSObject mengonversi a ScriptBlock ke delegasi (#10619)

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

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

    Setelah perubahan ini, objek yang ditampilkan adalah objek yang mendasarinya.