Apa yang Baru di PowerShell 7.4

PowerShell 7.4 menyertakan fitur, pembaruan, dan perubahan yang melanggar berikut ini. PowerShell 7.4 dibangun di .NET 8.0.0.

Untuk daftar lengkap perubahan, lihat CHANGELOG di repositori GitHub.

Perubahan mencolok

  • Gambar docker server nano tidak tersedia untuk rilis ini
  • Menambahkan parameter ProgressAction ke Parameter Umum
  • Perbarui beberapa API PowerShell untuk melempar ArgumentException alih-alih ArgumentNullException ketika argumen adalah string kosong (#19215) (Terima kasih @xtqqczze!)
  • Menghapus kode yang terkait dengan #requires -pssnapin (#19320)
  • Test-Json sekarang menggunakan JsonSchema.Net alih-alih Newtonsoft.Json.Schema. Dengan perubahan ini, Test-Json tidak lagi mendukung skema Draf 4 yang lebih lama. (#18141) (Terima kasih @gregsdennis!) Untuk informasi selengkapnya tentang skema JSON, lihat dokumentasi Skema JSON.
  • Output dari Test-Connection sekarang mencakup informasi yang lebih rinci tentang pengujian koneksi TCP
  • .NET memperkenalkan perubahan yang memengaruhi Test-Connection. Cmdlet sekarang mengembalikan kesalahan tentang kebutuhan untuk digunakan sudo pada platform Linux saat menggunakan ukuran buffer kustom (#20369)
  • Fitur eksperimental PSNativeCommandPreserveBytePipe sekarang menjadi mainstream. PowerShell sekarang mempertahankan data byte-stream saat mengalihkan aliran stdout perintah asli ke file atau saat mempipa data byte-stream ke aliran stdin dari perintah asli.
  • Ubah bagaimana jalur relatif ditangani Resolve-Path saat menggunakan parameter RelativeBasePath (#19755) (Terima kasih @MartinGC94!)
  • Menghapus kode PSv2 yang tidak digunakan - menghapus fungsi TabExpansion (#18337)

Pembaruan penginstal

Paket Windows MSI sekarang menyediakan opsi untuk menonaktifkan telemetri PowerShell selama penginstalan. Untuk informasi selengkapnya, lihat Menginstal paket msi dari baris perintah.

Versi PSResourceGet dan PSReadLine yang diperbarui

PowerShell 7.4 menyertakan Microsoft.PowerShell.PSResourceGet v1.0.1. Modul ini dipasang berdampingan dengan PowerShellGet v2.2.5 dan PackageManagement v1.4.8.1. Untuk informasi selengkapnya, lihat dokumentasi untuk Microsoft.PowerShell.PSResourceGet.

PowerShell 7.4 sekarang menyertakan PSReadLine v2.3.4. Untuk informasi selengkapnya, lihat dokumentasi untuk PSReadLine.

Peningkatan penyelesaian tab

Banyak terima kasih kepada @MartinGC94 dan lainnya untuk semua pekerjaan mereka untuk meningkatkan penyelesaian tab.

  • Memperbaiki masalah saat menyelesaikan perintah pertama dalam skrip dengan ekspresi array kosong (#18355)
  • Memperbaiki penyelesaian argumen posisi (#17796)
  • Prioritaskan set parameter default saat menyelesaikan argumen posisi (#18755)
  • Meningkatkan pengikatan pseudo untuk parameter dinamis (#18030)
  • Meningkatkan inferensi jenis kunci hashtable (#17907)
  • Memperbaiki kesalahan inferensi jenis untuk pernyataan pengembalian kosong (#18351)
  • Meningkatkan inferensi jenis untuk Get-Random (#18972)
  • Memperbaiki inferensi jenis untuk semua variabel cakupan (#18758)
  • Meningkatkan enumerasi jenis yang disimpulkan dalam alur (#17799)
  • Menambahkan penyelesaian untuk nilai dalam perbandingan saat membandingkan Enums (#17654)
  • Menambahkan penyelesaian penetapan properti untuk enum (#19178)
  • Memperbaiki penyelesaian untuk properti variabel PSCustomObject (#18682)
  • Memperbaiki penyelesaian anggota dalam argumen atribut (#17902)
  • Mengecualikan alias parameter redundan dari hasil penyelesaian (#19382)
  • Memperbaiki penyelesaian anggota kelas untuk kelas dengan jenis dasar (#19179)
  • Menambahkan penyelesaian untuk Menggunakan kata kunci (#16514)
  • Memperbaiki kebocoran variabel TabExpansion2 saat menyelesaikan variabel (#18763)
  • Aktifkan penyelesaian variabel di seluruh cakupan ScriptBlock (#19819)
  • Memperbaiki penyelesaian variabel pernyataan foreach (#19814)
  • Memperbaiki prioritas inferensi jenis variabel (#18691)
  • Memperbaiki penyelesaian anggota untuk kelas PowerShell Enum (#19740)
  • Memperbaiki penguraian untuk literal array dalam ekspresi indeks dalam panggilan metode (#19224)
  • Meningkatkan penyelesaian jalur (#19489)
  • Memperbaiki kesalahan pengindeksan di luar batas di CompleteInput untuk input skrip kosong (#19501)
  • Meningkatkan performa penyelesaian variabel (#19595)
  • Meningkatkan penyelesaian kunci Hashtable untuk jenis penetapan variabel yang dibatasi, Hashtable berlapis, dan lainnya (#17660)
  • Menyimpulkan output aplikasi eksternal sebagai string (#19193)
  • Perbarui penyelesaian parameter untuk enum untuk mengecualikan nilai yang tidak diizinkan oleh ValidateRange atribut (#17750) (Terima kasih @fflaten!).
  • Memperbaiki penyelesaian parameter dinamis (#19510)
  • Menambahkan penyelesaian untuk variabel yang ditetapkan oleh pernyataan Data (#19831)

Peningkatan cmdlet web

Banyak terima kasih kepada @CarloToso dan lainnya untuk semua pekerjaan dalam meningkatkan cmdlet web.

  • Perbaiki dekompresi dalam cmdlet web untuk menyertakan Brotli (#17955) (Terima kasih @iSazonov!)
  • Webcmdlet menambahkan 308 untuk mengalihkan kode dan pembersihan kecil (#18536)
  • Selesaikan penyajian bilah kemajuan di Invoke-WebRequest saat pengunduhan selesai atau dibatalkan (#18130)
  • Cmdlet web mendapatkan interval Coba Lagi-Setelah dari header respons jika kode status adalah 429 (#18717)
  • Cmdlet web mengatur pengodean charset default ke UTF8 (#18219)
  • Mempertahankan WebSession.MaximumRedirection dari perubahan (#19190)
  • Deklarasi XML penguraian WebCmdlets untuk mendapatkan nilai pengodean, jika ada. (#18748)
  • Perbaiki menggunakan xml -Body di webcmdlets tanpa pengodean (#19281)
  • Sesuaikan perilaku metode PUT ke POST one untuk jenis konten default di WebCmdlets (#19152)
  • Mempertimbangkan ContentType dari Header di WebCmdlets (#19227)
  • Izinkan untuk mempertahankan metode HTTP asli dengan menambahkan -PreserveHttpMethodOnRedirect ke cmdlet Web (#18894)
  • Webcmdlets menampilkan kesalahan pada https ke pengalihan http (#18595)
  • Menambahkan sakelar AllowInsecureRedirect ke cmdlet Web (#18546)
  • Meningkatkan pesan verbose dalam cmdlet web ketika panjang konten tidak diketahui (#19252)
  • Bangun URI relatif untuk tautan dari respons di Invoke-WebRequest (#19092)
  • Memperbaiki pengalihan untuk -CustomMethod POST di WebCmdlets (#19111)
  • Buang respons sebelumnya di Webcmdlets (#19117)
  • Meningkatkan Invoke-WebRequest format kesalahan xml dan json (#18837)
  • Tambahkan parameter ValidateNotNullOrEmpty ke Parameter OutFile dan InFile webCmdlets (#19044)
  • Daftar header pembaruan HttpKnownHeaderNames (#18947)
  • Invoke-RestMethod -FollowRelLink memperbaiki tautan yang berisi koma (#18829)
  • Memperbaiki bug dengan mengelola pengalihan dan KeepAuthorization di cmdlet Web (#18902)
  • Menambahkan StatusCode ke HttpResponseException (#18842)
  • Mendukung koneksi persisten HTTP di Web Cmdlets (#19249) (Terima kasih @stevenebutler!)
  • Pembersihan Invoke-RestMethod kecil (#19490)
  • Tingkatkan pesan verbose WebCmdlets untuk menampilkan versi HTTP yang benar (#19616)
  • Menambahkan FileNameStar ke MultipartFileContent di WebCmdlets (#19467)
  • Perbaiki status HTTP dari 409 hingga 429 untuk WebCmdlets untuk mendapatkan interval coba lagi dari header Retry-After. (#19622) (Terima kasih @mkht!)
  • Ubah -TimeoutSec ke -ConnectionTimeoutSeconds dan tambahkan -OperationTimeoutSeconds ke cmdlet web (#19558) (Terima kasih @stevenebutler!) cmdlet Lainnya
  • Mendukung Ctrl+c saat koneksi macet saat membaca data di WebCmdlets (#19330) (Terima kasih @stevenebutler!)
  • Mendukung soket domain Unix di WebCmdlets (#19343)

Peningkatan cmdlet lainnya

  • Test-Connection sekarang mengembalikan kesalahan tentang kebutuhan untuk digunakan sudo pada platform Linux saat menggunakan ukuran buffer kustom (#20369)
  • Menambahkan jenis output ke perintah Format (#18746) (Terima kasih @MartinGC94!)
  • Tambahkan atribut jenis output untuk Get-WinEvent (#17948) (Terima kasih @MartinGC94!)
  • Tambahkan parameter Path dan LiteralPath ke Test-Json cmdlet (#19042) (Terima kasih @ArmaanMcleod!)
  • Tambahkan parameter NoHeader ke ConvertTo-Csv cmdlet dan Export-Csv (#19108) (Terima kasih @ArmaanMcleod!)
  • Tambahkan parameter Konfirmasi dan WhatIf ke Stop-Transcript(#18731) (Terima kasih @JohnLBevan!)
  • Tambahkan parameter FuzzyMinimumDistance ke Get-Command (#18261)
  • Membuat parameter Pengodean dapat mengambil ANSI pengodean di PowerShell (#19298) (Terima kasih @CarloToso!)
  • Tambahkan kemajuan ke Copy-Item (#18735)
  • Update-Help sekarang melaporkan kesalahan saat menggunakan budaya implisit pada sistem non-AS. (#17780) (Terima kasih @dkaszews!)
  • Tidak memerlukan aktivitas saat membuat rekaman kemajuan yang telah selesai (#18474) (Terima kasih @MartinGC94!)
  • Melarang nilai negatif untuk Get-Content parameter -Head cmdlet dan -Tail (#19715) (Terima kasih @CarloToso!)
  • Buat Update-Help kesalahan yang tepat ketika budaya saat ini tidak terkait dengan bahasa (#19765) (Terima kasih @josea!)
  • Izinkan penggambungan -Skip parameter dan -SkipLast dalam Select-Object cmdlet. (#18849) (Terima kasih @ArmaanMcleod!)
  • Menambahkan Get-SecureRandom cmdlet (#19587)
  • Set-Clipboard -AsOSC52 untuk penggunaan jarak jauh (#18222) (Terima kasih @dkaszews!)
  • Mempercepat Resolve-Path resolusi jalur relatif (#19171) (Terima kasih @MartinGC94!)
  • Menambahkan parameter -CaseInsensitive switch ke Select-Object cmdlet dan Get-Unique (#19683) (Terima kasih @ArmaanMcleod!)
  • Restart-Computer dan Stop-Computer harus gagal dengan kesalahan ketika tidak berjalan melalui sudo di Unix (#19824)

Peningkatan mesin

Pembaruan untuk $PSStyle

  • Menambahkan properti Dim dan DimOff (#18653)
  • Menambahkan metode statis ke kelas PSStyle yang memetakan nilai ConsoleColor latar depan dan latar belakang ke urutan escape ANSI (#17938)
  • Header tabel untuk bidang terhitung diformat dalam miring secara default
  • Menambahkan dukungan penghormatan $PSStyle.OutputRendering pada host jarak jauh (#19601)
  • Data telemetri yang diperbarui untuk menyertakan penggunaan CrescendoBuilt modul (#20371)

Pembaruan Mesin Lainnya

  • Membuat kelas PowerShell tidak berafiliasi dengan Runspace saat mendeklarasikan NoRunspaceAffinity atribut (#18138)
  • ValidateNotNullOrWhiteSpace Tambahkan atribut (#17191) (Terima kasih@wmentha!)
  • Tambahkan sqlcmd ke daftar untuk passing argumen warisan (#18559)
  • Tambahkan fungsi cd~ (#18308) (Terima kasih @GigaScratch!)
  • Memperbaiki penguraian jenis array dalam jenis generik (#19205) (Terima kasih @MartinGC94!)
  • Memperbaiki wildcard globbing di akar jalur perangkat (#19442) (Terima kasih @MartinGC94!)
  • Menambahkan API publik untuk mendapatkan lokasi elemen PSModulePath (#19422)
  • Memperbaiki string yang salah untuk mengetik konversi (#19560) (Terima kasih @MartinGC94!)
  • Perbaiki eksekusi lambat ketika banyak titik henti yang digunakan (#14953) (Terima kasih @nohwnd!)
  • Menghapus kode yang terkait dengan #requires -pssnapin (#19320)

Fitur Eksperimental

PowerShell 7.4 memperkenalkan fitur eksperimental berikut:

  • PSFeedbackProvider - Mengganti kerangka kerja saran yang dikodekan secara permanen dengan penyedia umpan balik yang dapat diperluas.
    • Fitur ini juga menambahkan properti FeedbackName, FeedbackText, dan FeedbackAction ke $PSStyle.Formatting yang memungkinkan Anda mengubah pemformatan pesan umpan balik.
  • PSModuleAutoLoadSkipOfflineFiles - Penemuan modul sekarang melewati file yang ditandai oleh penyedia cloud sebagai tidak sepenuhnya berada di disk.
  • PSCommandWithArgs - Menambahkan dukungan untuk meneruskan argumen ke perintah sebagai string tunggal

Fitur eksperimental berikut menjadi mainstream:

PowerShell 7.4 mengubah fitur eksperimental berikut:

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