Bagikan melalui


Perbedaan antara Windows PowerShell 5.1 dan PowerShell 7.x

Windows PowerShell 5.1 dibangun di atas .NET Framework v4.5. Dengan dirilisnya PowerShell 6.0, PowerShell menjadi proyek sumber terbuka yang dibangun di .NET Core 2.0. Berpindah dari .NET Framework ke .NET Core memungkinkan PowerShell untuk menjadi solusi lintas platform. PowerShell berjalan di Windows, macOS, dan Linux.

Ada beberapa perbedaan dalam bahasa PowerShell antara Windows PowerShell dan PowerShell. Perbedaan yang paling menonjol adalah dalam ketersediaan dan perilaku cmdlet PowerShell antara platform Windows dan non-Windows dan perubahan yang berasal dari perbedaan antara .NET Framework dan .NET Core.

Artikel ini merangkum perbedaan signifikan dan perubahan mendasar antara Windows PowerShell dan versi PowerShell saat ini. Ringkasan ini tidak menyertakan fitur atau cmdlet baru yang telah ditambahkan. Artikel ini juga tidak membahas apa yang berubah antar versi. Tujuan artikel ini adalah untuk menyajikan status PowerShell saat ini dan perbedaannya dengan Windows PowerShell. Untuk diskusi terperinci tentang perubahan antara versi dan penambahan fitur baru, lihat artikel Apa yang Baru untuk setiap versi.

.NET Framework vs .NET Core

PowerShell di Linux dan macOS menggunakan .NET core, yang merupakan subset dari .NET Framework lengkap di Microsoft Windows. Ini signifikan karena PowerShell menyediakan akses langsung ke jenis dan metode kerangka kerja yang mendasar. Akibatnya, skrip yang berjalan pada Windows mungkin tidak berjalan pada platform non-Windows karena perbedaan dalam kerangka kerja. Untuk informasi selengkapnya tentang perubahan di .NET Core, lihat Perubahan signifikan untuk migrasi dari .NET Framework ke .NET Core.

Setiap rilis baru PowerShell dibangun pada versi .NET yang lebih baru. Mungkin ada perubahan mencolok di .NET yang memengaruhi PowerShell.

  • PowerShell 7.5 - Dibangun di .NET 9.0
  • PowerShell 7.4 - Dibangun di .NET 8.0
  • PowerShell 7.3 - Dibangun di .NET 7.0
  • PowerShell 7.2 (LTS-current) - Dibangun di .NET 6.0 (LTS-current)
  • PowerShell 7.1 - Dibangun di .NET 5.0
  • PowerShell 7.0 (LTS) - Dibangun di .NET Core 3.1 (LTS)
  • PowerShell 6.2 - Dibangun di .NET Core 2.1
  • PowerShell 6.1 - Dibangun di .NET Core 2.1
  • PowerShell 6.0 - Dibangun di .NET Core 2.0

Dengan munculnya .NET Standard 2.0, PowerShell dapat memuat banyak modul Windows PowerShell tradisional tanpa modifikasi. Selain itu, PowerShell 7 menyertakan fitur Kompatibilitas Windows PowerShell yang memungkinkan Anda menggunakan modul Windows PowerShell yang masih memerlukan kerangka kerja lengkap.

Untuk informasi selengkapnya, lihat:

Waspadai perubahan metode .NET

Meskipun perubahan metode .NET tidak spesifik untuk PowerShell, perubahan tersebut dapat memengaruhi skrip Anda, terutama jika Anda memanggil metode .NET secara langsung. Selain itu, mungkin ada kelebihan beban baru untuk konstruktor. Ini dapat berdampak pada cara Anda membuat objek menggunakan New-Object atau metode [type]::new().

Misalnya, .NET menambahkan kelebihan beban ke metode [System.String]::Split() yang tidak tersedia di .NET Framework 4.5. Daftar berikut ini memperlihatkan kelebihan beban untuk metode Split() yang tersedia di Windows PowerShell 5.1:

PS> "".Split

OverloadDefinitions
-------------------
string[] Split(Params char[] separator)
string[] Split(char[] separator, int count)
string[] Split(char[] separator, System.StringSplitOptions options)
string[] Split(char[] separator, int count, System.StringSplitOptions options)
string[] Split(string[] separator, System.StringSplitOptions options)
string[] Split(string[] separator, int count, System.StringSplitOptions options)

Daftar berikut ini memperlihatkan kelebihan beban untuk metode Split() yang tersedia di PowerShell 7:

"".Split

OverloadDefinitions
-------------------
string[] Split(char separator, System.StringSplitOptions options)
string[] Split(char separator, int count, System.StringSplitOptions options)
string[] Split(Params char[] separator)
string[] Split(char[] separator, int count)
string[] Split(char[] separator, System.StringSplitOptions options)
string[] Split(char[] separator, int count, System.StringSplitOptions options)
string[] Split(string separator, System.StringSplitOptions options)
string[] Split(string separator, int count, System.StringSplitOptions options)
string[] Split(string[] separator, System.StringSplitOptions options)
string[] Split(string[] separator, int count, System.StringSplitOptions options)

Di Windows PowerShell 5.1, Anda dapat meneruskan array karakter (char[]) ke metode Split() sebagai string. Metode ini membagi string target pada setiap kemunculan karakter dalam array. Perintah berikut membagi string target di Windows PowerShell 5.1, tetapi tidak di PowerShell 7:

# PowerShell 7 example
"1111p2222q3333".Split('pq')
1111p2222q3333

Untuk mengikat ke kelebihan beban yang benar, Anda harus mengetik string ke array karakter:

# PowerShell 7 example
"1111p2222q3333".Split([char[]]'pq')
1111
2222
3333

Modul tidak lagi dikirim dengan PowerShell

Untuk berbagai alasan kompatibilitas, modul berikut tidak lagi disertakan dalam PowerShell.

  • ISE
  • Microsoft.PowerShell.LocalAccounts
  • Microsoft.PowerShell.ODataUtils
  • Microsoft.PowerShell.Operasi.Validasi
  • PSScheduledJob
  • PSWorkflow
  • PSWorkflowUtility

PowerShell Workflow

Alur Kerja PowerShell adalah fitur di Windows PowerShell yang dibangun di atas Windows Workflow Foundation (WF) yang memungkinkan pembuatan runbook yang andal untuk tugas yang berlangsung lama atau diparalelkan.

Karena kurangnya dukungan untuk Windows Workflow Foundation di .NET Core, kami menghapus Alur Kerja PowerShell dari PowerShell.

Di masa mendatang, kami ingin mengaktifkan paralelisme/konkurensi asli dalam bahasa PowerShell tanpa perlu PowerShell Workflow.

Jika ada kebutuhan untuk menggunakan titik pemeriksaan untuk melanjutkan skrip setelah OS dimulai ulang, sebaiknya gunakan Penjadwal Tugas untuk menjalankan skrip pada startup OS, tetapi skrip harus mempertahankan statusnya sendiri (seperti mempertahankannya ke file).

Cmdlet dihapus dari PowerShell

Untuk modul yang disertakan dalam PowerShell, cmdlet berikut dihapus dari PowerShell karena berbagai alasan kompatibilitas atau penggunaan API yang tidak didukung.

CimCmdlets

  • Export-BinaryMiLog

Microsoft.PowerShell.Core

  • Add-PSSnapin
  • Export-Console
  • Get-PSSnapin
  • Remove-PSSnapin
  • Resume-Job
  • Suspend-Job

Microsoft.PowerShell.Diagnostics

  • Export-Counter
  • Import-Counter

Microsoft.PowerShell.Management

  • Add-Computer
  • Checkpoint-Computer
  • Clear-EventLog
  • Complete-Transaction
  • Disable-ComputerRestore
  • Enable-ComputerRestore
  • Get-ComputerRestorePoint
  • Get-ControlPanelItem
  • Get-EventLog
  • Get-Transaction
  • Get-WmiObject
  • Invoke-WmiMethod
  • Limit-EventLog
  • New-EventLog
  • New-WebServiceProxy
  • Register-WmiEvent
  • Remove-Computer
  • Remove-EventLog
  • Remove-WmiObject
  • Reset-ComputerMachinePassword
  • Restore-Computer
  • Set-WmiInstance
  • Show-ControlPanelItem
  • Show-EventLog
  • Start-Transaction
  • Test-ComputerSecureChannel
  • Undo-Transaction
  • Use-Transaction
  • Write-EventLog

Microsoft.PowerShell.Utility

  • Convert-String
  • ConvertFrom-String

PSDesiredStateConfiguration

  • Disable-DscDebug
  • Enable-DscDebug
  • Get-DscConfiguration
  • Get-DscConfigurationStatus
  • Get-DscLocalConfigurationManager
  • Publish-DscConfiguration
  • Remove-DscConfigurationDocument
  • Restore-DscConfiguration
  • Set-DscLocalConfigurationManager
  • Start-DscConfiguration
  • Stop-DscConfiguration
  • Test-DscConfiguration
  • Update-DscConfiguration

Cmdlet WMI v1

Cmdlet WMI v1 berikut dihapus dari PowerShell:

  • Register-WmiEvent
  • Set-WmiInstance
  • Invoke-WmiMethod
  • Get-WmiObject
  • Remove-WmiObject

Cmdlet modul CimCmdlets (juga dikenal sebagai WMI v2) memiliki fungsi yang sama dan menyediakan fungsionalitas baru serta sintaksis yang didesain ulang.

New-WebServiceProxy cmdlet telah dihapus

.NET Core tidak mendukung Windows Communication Framework, yang menyediakan layanan untuk menggunakan protokol SOAP. Cmdlet ini dihapus karena membutuhkan SOAP.

cmdlet *-Transaction dihapus

Cmdlet ini memiliki penggunaan yang sangat terbatas. Keputusan tersebut dibuat untuk menghentikan dukungan bagi mereka.

  • Complete-Transaction
  • Get-Transaction
  • Start-Transaction
  • Undo-Transaction
  • Use-Transaction

*-EventLog cmdlet

Karena penggunaan API yang tidak didukung, cmdlet *-EventLog telah dihapus dari PowerShell. Get-WinEvent dan New-WinEvent tersedia untuk mengambil dan membuat event di Windows.

Cmdlet yang menggunakan Windows Presentation Framework (WPF)

.NET Core 3.1 menambahkan dukungan untuk WPF, sehingga rilis PowerShell 7.0 memulihkan fitur khusus Windows berikut:

  • Cmdlet Show-Command
  • Cmdlet Out-GridView
  • Parameter ShowWindow dari Get-Help

Perubahan Konfigurasi Status yang Diinginkan PowerShell (DSC)

Invoke-DscResource dipulihkan sebagai fitur eksperimental di PowerShell 7.0.

Dimulai dengan PowerShell 7.2, modul PSDesiredStateConfiguration telah dihapus dari PowerShell dan telah diterbitkan ke Galeri PowerShell. Untuk informasi selengkapnya, lihat pengumuman di blog Tim PowerShell.

Perubahan eksekusi PowerShell

Mengganti nama powershell.exe menjadi pwsh.exe

Nama biner untuk PowerShell telah diubah dari powershell(.exe) menjadi pwsh(.exe). Perubahan ini menyediakan cara deterministik bagi pengguna untuk menjalankan PowerShell pada mesin dan mendukung penginstalan Windows PowerShell dan PowerShell secara berdampingan.

Perubahan tambahan pada pwsh(.exe) dari powershell.exe:

  • Mengubah parameter posisi pertama dari -Command menjadi -File. Perubahan ini memperbaiki penggunaan #! (yang juga dikenal sebagai shebang) dalam skrip PowerShell yang sedang dieksekusi dari dalam shell selain PowerShell di platform non-Windows. Ini juga berarti Bahwa Anda dapat menjalankan perintah seperti pwsh foo.ps1 atau pwsh fooScript tanpa menentukan -File. Namun, perubahan ini mengharuskan Anda secara eksplisit menentukan -c atau -Command saat mencoba menjalankan perintah seperti pwsh.exe -Command Get-Command.
  • pwsh menerima opsi -i (atau -Interactive) untuk menunjukkan shell interaktif. Ini memungkinkan PowerShell digunakan sebagai shell default pada platform Unix.
  • Telah menghapus parameter -ImportSystemModules dan -PSConsoleFile dari pwsh.exe.
  • Mengubah pwsh -Version dan bantuan bawaan untuk pwsh.exe agar selaras dengan alat asli lainnya.
  • Pesan kesalahan argumen tidak valid untuk -File dan -Command serta kode keluaran yang konsisten dengan standar Unix.
  • Menambahkan parameter -WindowStyle pada Windows. Demikian pula, pembaruan penginstalan berbasis paket pada platform non-Windows adalah pembaruan di tempat.

Nama yang dipersingkat juga konsisten dengan penamaan shell pada platform non-Windows.

Mendukung menjalankan skrip PowerShell dengan parameter bool

Sebelumnya, menggunakan pwsh.exe untuk menjalankan skrip PowerShell menggunakan -File tidak menyediakan cara untuk meneruskan $true/$false sebagai nilai parameter. Dukungan untuk $true/$false sebagai nilai yang diurai ke parameter ditambahkan. Nilai switch juga didukung.

Peningkatan kompatibilitas mundur untuk Windows PowerShell

Untuk Windows, parameter sakelar baru UseWindowsPowerShell ditambahkan ke Import-Module. Sakelar ini membuat modul proksi di PowerShell 7 yang menggunakan proses Windows PowerShell lokal untuk menjalankan cmdlet apa pun yang terkandung dalam modul tersebut secara implisit. Untuk informasi selengkapnya, lihat Import-Module .

Untuk informasi selengkapnya tentang modul Microsoft yang bekerja dengan PowerShell 7.0, lihat Tabel Kompatibilitas Modul .

Dukungan Microsoft Update untuk Windows

PowerShell 7.2 menambahkan dukungan untuk Microsoft Update. Saat mengaktifkan fitur ini, Anda akan mendapatkan pembaruan PowerShell 7 terbaru dalam alur manajemen Windows Update (WU) tradisional Anda, baik itu dengan Windows Update for Business, WSUS, SCCM, atau dialog WU interaktif di Pengaturan.

Paket MSI PowerShell 7.2 menyertakan opsi baris perintah berikut:

  • USE_MU - Properti ini memiliki dua nilai yang mungkin:
    • 1 (default) - Memilih memperbarui melalui Pembaruan Microsoft atau WSUS
    • 0 - Jangan memilih untuk memperbarui melalui Pembaruan Microsoft atau WSUS
  • ENABLE_MU
    • 1 (standar) - Memilih untuk menggunakan Pembaruan Microsoft, Pembaruan Otomatis, atau Pembaruan Windows
    • 0 - Jangan memilih menggunakan Pembaruan Microsoft, Pembaruan Otomatis, atau Pembaruan Windows

Perubahan mesin

Mendukung PowerShell sebagai shell Unix default

Di Unix, ini adalah konvensi bagi shell untuk menerima -i untuk shell interaktif dan banyak alat mengharapkan perilaku ini (script misalnya, dan saat mengatur PowerShell sebagai shell default) dan memanggil shell dengan sakelar -i. Perubahan ini mengubah cara -i yang sebelumnya dapat digunakan sebagai cara singkat untuk mencocokkan -InputFormat, yang sekarang perlu menjadi -in.

Snap-in kustom

PowerShell snap-ins adalah pendahulu modul PowerShell yang tidak diadopsi secara luas di komunitas PowerShell.

Karena kompleksitas mendukung snap-in dan kurangnya penggunaannya di komunitas, kami tidak lagi mendukung snap-in kustom di PowerShell.

Penanda fitur eksperimental

PowerShell 6.2 mengaktifkan dukungan untuk fitur eksperimental . Ini memungkinkan pengembang PowerShell untuk memberikan fitur baru dan mendapatkan umpan balik sebelum desain selesai. Dengan cara ini kita menghindari membuat perubahan signifikan saat desain berkembang.

Gunakan Get-ExperimentalFeature untuk mendapatkan daftar fitur eksperimental yang tersedia. Anda dapat mengaktifkan atau menonaktifkan fitur-fitur ini dengan Enable-ExperimentalFeature dan Disable-ExperimentalFeature.

Muat rakitan dari jalur dasar modul sebelum mencoba memuat dari GAC

Sebelumnya, ketika modul biner memiliki perakitan modul di GAC, kami memuat rakitan dari GAC sebelum mencoba memuatnya dari jalur dasar modul.

Lewati pemeriksaan elemen null untuk koleksi dengan tipe elemen bertipe nilai

Untuk parameter Mandatory dan atribut ValidateNotNull dan ValidateNotNullOrEmpty, abaikan pemeriksaan elemen null jika tipe elemen koleksi adalah tipe nilai.

Pertahankan $? untuk ParenExpression, SubExpression, dan ArrayExpression

PR ini mengubah cara kita mengompilasi subpipeline (...), subekspresi $(...) dan ekspresi array @() sehingga $? tidak secara otomatis benar. Sebaliknya, nilai $? tergantung pada hasil alur atau pernyataan yang dijalankan.

Perbaiki $? agar tidak menjadi $false saat perintah asli menulis ke stderr

$? tidak diatur ke $false ketika perintah bawaan menulis ke stderr. Adalah umum bagi perintah bawaan untuk menulis ke stderr tanpa berniat menunjukkan kegagalan. $? diatur ke $false hanya ketika perintah asli memiliki kode keluar bukan nol.

Membuat $ErrorActionPreference tidak memengaruhi output stderr dari perintah asli

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

Mengubah $OutputEncoding untuk menggunakan pengodean UTF-8 NoBOM daripada ASCII

Pengodean sebelumnya, ASCII (7-bit), akan mengakibatkan perubahan output yang salah dalam beberapa kasus. Menjadikan UTF-8 NoBOM sebagai default akan mempertahankan output Unicode dengan pengodean yang didukung oleh sebagian besar alat dan sistem operasi.

Menyatukan cmdlet dengan parameter -Encoding menjadi berjenis System.Text.Encoding

Nilai -EncodingByte telah dihapus dari cmdlet penyedia FileSystem. Parameter baru, -AsByteStream, sekarang digunakan untuk menentukan bahwa aliran byte diperlukan sebagai input atau bahwa output adalah deretan byte.

Mengubah pengodean New-ModuleManifest ke UTF8NoBOM pada platform non-Windows

Sebelumnya, New-ModuleManifest membuat manifes psd1 di UTF-16 dengan BOM, menimbulkan masalah pada alat-alat Linux. Perubahan signifikan ini mengubah pengodean New-ModuleManifest menjadi UTF tanpa BOM di platform non-Windows.

Menghapus AllScope dari sebagian besar alias default

Untuk mempercepat pembuatan cakupan, AllScope dihapus dari sebagian besar alias default. AllScope dibiarkan untuk beberapa alias yang sering digunakan di mana pencarian lebih cepat.

-Verbose dan -Debug tidak lagi mengambil alih $ErrorActionPreference

Sebelumnya, jika -Verbose atau -Debug ditentukan, itu akan menimpa efek dari perilaku $ErrorActionPreference. Dengan perubahan ini, -Verbose dan -Debug tidak lagi memengaruhi perilaku $ErrorActionPreference.

Selain itu, parameter -Debug mengatur $DebugPreference ke Lanjutkan alih-alih Bertanya.

Membuat $PSCulture secara konsisten mencerminkan perubahan budaya selama sesi

Di Windows PowerShell, nilai kultur saat ini di-cache, yang dapat memungkinkan nilai untuk tidak sesuai dengan kultur berubah setelah sesi-startup. Perilaku caching ini diperbaiki di PowerShell Core.

Izinkan parameter bernama yang ditentukan secara eksplisit untuk menggantikan parameter yang sama dari percikan hashtable

Dengan perubahan ini, parameter bernama dari splatting dipindahkan ke akhir daftar parameter sehingga mereka 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 parameter $args fungsi sederhana. Dengan memindahkan splatting ke akhir daftar argumen, urutan parameter yang muncul di $argsberubah.

Contohnya:

function SimpleTest {
    param(
        $Name,
        $Path
    )
    "Name: $Name; Path: $Path; Args: $args"
}

Dalam perilaku sebelumnya, MyPath tidak terikat ke -Path karena 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 ke -Path.

PS> SimpleTest @hash "MyPath"
Name: Hello; Path: MyPath; Args: -Blah: World

Perubahan bahasa

Operator penggabungan-null ??

Operator null-coalescing ?? mengembalikan nilai operand sebelah kirinya jika bukan null. Jika tidak, sistem akan mengevaluasi operand di sisi kanan dan mengembalikan hasilnya. Operator ?? tidak mengevaluasi operand kanannya jika operand kiri bernilai non-null.

$x = $null
$x ?? 100
100

Dalam contoh berikut, operand sebelah kanan tidak akan dievaluasi.

[string] $todaysDate = '1/10/2020'
$todaysDate ?? (Get-Date).ToShortDateString()
1/10/2020

Operator penugasan null-coalescing ??=

Operator penugasan null-coalescing ??= menetapkan nilai operand kanannya ke operand kirinya hanya jika operand kirinya bernilai null. Operator ??= tidak mengevaluasi operand kanannya jika operand kiri bernilai non-null.

$x = $null
$x ??= 100
$x
100

Dalam contoh berikut, operand sebelah kanan tidak akan dievaluasi.

[string] $todaysDate = '1/10/2020'
$todaysDate ??= (Get-Date).ToShortDateString()
1/10/2020

Operator bersyarat null

Nota

Fitur ini dipindahkan dari eksperimental ke mainstream di PowerShell 7.1.

Operator bersyarat-null menerapkan akses anggota, ?., atau akses elemen, ?[], operasi pada operannya hanya jika operand tersebut mengevaluasi ke non-null; jika tidak, mengembalikan null.

Karena PowerShell memungkinkan ? menjadi bagian dari nama variabel, spesifikasi formal dari nama variabel diperlukan untuk menggunakan operator ini. Jadi diperlukan untuk menggunakan {} di sekitar nama variabel seperti ${a} atau ketika ? adalah bagian dari nama variabel ${a?}.

Dalam contoh berikut, nilai PropName dikembalikan.

$a = @{ PropName = 100 }
${a}?.PropName
100

Contoh berikut akan mengembalikan null, tanpa mencoba mengakses nama anggota PropName.

$a = $null
${a}?.PropName

Demikian pula, nilai elemen akan dikembalikan.

$a = 1..10
${a}?[0]
1

Dan ketika operand adalah null, elemen tidak diakses dan null dikembalikan.

$a = $null
${a}?[0]

Nota

Sintaks nama variabel ${<name>} tidak boleh dikacaukan dengan operator subekspresi $(). Untuk informasi selengkapnya, lihat Bagian nama variabel about_Variables.

Menambahkan operator & untuk kontrol pekerjaan

Menempatkan & di akhir pipeline menyebabkan pipeline dijalankan sebagai pekerjaan PowerShell. Saat sebuah pipeline dijalankan di latar belakang, sebuah objek pekerjaan dikembalikan. Setelah alur kerja berjalan sebagai tugas, semua cmdlet *-Job standar dapat digunakan untuk mengelola tugas. Variabel (mengabaikan variabel khusus proses) yang digunakan dalam pipeline secara otomatis disalin ke pekerjaan agar Copy-Item $foo $bar & berjalan dengan benar. Pekerjaan ini juga dijalankan di direktori saat ini alih-alih direktori beranda pengguna.

Metode/properti baru pada PSCustomObject

Kami telah menambahkan metode dan properti baru ke PSCustomObject. PSCustomObject sekarang menyertakan properti Count/Length seperti objek lain.

$PSCustomObject = [pscustomobject]@{foo = 1}

$PSCustomObject.Length
1
$PSCustomObject.Count
1

Pekerjaan ini juga mencakup metode ForEach dan Where yang memungkinkan Anda mengoperasikan dan memfilter item PSCustomObject:

$PSCustomObject.ForEach({$_.foo + 1})
2
$PSCustomObject.Where({$_.foo -gt 0})
foo
---
  1

Konversi dari PSMethod ke Delegat

Anda dapat mengonversi PSMethod menjadi delegasi. Ini memungkinkan Anda melakukan hal-hal seperti meneruskan PSMethod[M]::DoubleStrLen sebagai nilai delegasi ke dalam [M]::AggregateString:

class M {
    static [int] DoubleStrLen([string] $value) { return 2 * $value.Length }

    static [long] AggregateString([string[]] $values, [Func[string, int]] $selector) {
        [long] $res = 0
        foreach($s in $values){
            $res += $selector.Invoke($s)
        }
        return $res
    }
}

[M]::AggregateString((gci).Name, [M]::DoubleStrLen)

Perilaku perbandingan string berubah di PowerShell 7.1

PowerShell 7.1 dibangun di .NET 5.0, yang memperkenalkan perubahan yang melanggar berikut:

Sejak .NET 5.0, perbandingan string yang tidak bergantung pada 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

Cmdlet baru

Cmdlet Get-Uptime baru

Cmdlet Get-Uptime mengembalikan waktu yang berlalu sejak sistem operasi terakhir kali di-boot. Cmdlet diperkenalkan di PowerShell 6.0.

Cmdlet Remove-Alias baru

Cmdlet Remove-Alias menghapus alias dari sesi PowerShell saat ini. Cmdlet diperkenalkan di PowerShell 6.0.

Cmdlet baru Remove-Service

cmdlet Remove-Service menghapus layanan Windows di registri dan di database layanan. Cmdlet Remove-Service diperkenalkan di PowerShell 6.0.

Cmdlet Markdown Baru

Markdown adalah standar untuk membuat dokumen teks biasa yang dapat dibaca dengan pemformatan dasar yang dapat dirender ke dalam HTML.

Cmdlet berikut ditambahkan di PowerShell 6.1:

  • ConvertFrom-Markdown - Mengonversi konten string atau file menjadi objek MarkdownInfo.
  • Get-MarkdownOption - Menampilkan warna dan gaya saat ini yang digunakan untuk merender konten Markdown di konsol.
  • Set-MarkdownOption - Mengatur warna dan gaya yang digunakan untuk merender konten Markdown di konsol.
  • Show-Markdown - Menampilkan konten Markdown di dalam konsol atau sebagai HTML

Cmdlet Test-Json baru

cmdlet Test-Json menguji apakah string adalah dokumen JavaScript Object Notation (JSON) yang valid dan dapat secara opsional memverifikasi bahwa dokumen JSON terhadap skema yang disediakan.

Cmdlet ini diperkenalkan di PowerShell 6.1

Cmdlet baru untuk mendukung Fitur Eksperimental

Cmdlet berikut ditambahkan di PowerShell 6.2 untuk mendukung Fitur Eksperimental.

Cmdlet baru Join-String

Cmdlet Join-String menggabungkan objek dari alur menjadi satu string. Cmdlet ini ditambahkan di PowerShell 6.2.

Tampilan baru ConciseView dan cmdlet Get-Error

PowerShell 7.0 meningkatkan tampilan pesan kesalahan untuk meningkatkan keterbacaan kesalahan interaktif dan skrip dengan tampilan default baru, ConciseView. Tampilan dapat dipilih pengguna melalui variabel preferensi $ErrorView.

Dengan ConciseView, jika kesalahan bukan dari kesalahan skrip atau pengurai, maka itu adalah pesan kesalahan satu baris:

Get-ChildItem -Path C:\NotReal
Get-ChildItem: Cannot find path 'C:\NotReal' because it does not exist

Jika kesalahan terjadi selama eksekusi skrip atau merupakan kesalahan penguraian, PowerShell mengembalikan pesan kesalahan multibaris yang berisi kesalahan, penunjuk, dan pesan kesalahan yang menunjukkan di mana kesalahan berada di baris tersebut. Jika terminal tidak mendukung urutan escape warna ANSI (VT100), maka warna tidak ditampilkan.

Tampilan default di PowerShell 7 adalah ConciseView. Tampilan default sebelumnya adalah NormalView dan Anda dapat memilih ini dengan mengatur variabel preferensi $ErrorView.

$ErrorView = 'NormalView' # Sets the error view to NormalView
$ErrorView = 'ConciseView' # Sets the error view to ConciseView

Nota

Properti baru ErrorAccentColor ditambahkan ke $Host.PrivateData untuk mendukung perubahan warna aksen pesan kesalahan.

Cmdlet Get-Erroryang baru menyediakan tampilan terperinci dan lengkap dari kesalahan yang terdefinisi secara penuh ketika diinginkan. Secara default cmdlet menampilkan detail lengkap, termasuk pengecualian dalam, dari kesalahan terakhir yang terjadi.

Cmdlet Get-Error mendukung input dari alur menggunakan variabel bawaan $Error. Get-Error menampilkan semua kesalahan yang dialirkan.

$Error | Get-Error

Cmdlet Get-Error mendukung parameter Terbaru, memungkinkan Anda menentukan berapa banyak kesalahan dari sesi saat ini yang ingin Anda tampilkan.

Get-Error -Newest 3 # Displays the lst three errors that occurred in the session

Untuk informasi selengkapnya, lihat Get-Error.

Perubahan cmdlet

Eksekusi paralel ditambahkan ke ForEach-Object

Dimulai pada PowerShell 7.0, cmdlet ForEach-Object, yang mengiterasi item-item dalam koleksi, sekarang memiliki paralelisme terintegrasi dengan parameter Paralel baru.

Secara default, blok skrip paralel menggunakan direktori kerja pemanggil saat ini yang memulai tugas paralel.

Contoh ini mengambil 50.000 entri log dari 5 log sistem pada komputer Windows lokal:

$logNames = 'Security','Application','System','Windows PowerShell','Microsoft-Windows-Store/Operational'

$logEntries = $logNames | ForEach-Object -Parallel {
    Get-WinEvent -LogName $_ -MaxEvents 10000
} -ThrottleLimit 5

$logEntries.Count

50000

Parameter Paralel menentukan blok skrip yang dijalankan secara paralel untuk setiap nama log input.

Parameter ThrottleLimit baru membatasi jumlah blok skrip yang berjalan secara paralel pada waktu tertentu. Pengaturan awal adalah 5.

Gunakan variabel $_ untuk mewakili objek input saat ini di blok skrip. Gunakan pengubah cakupan Using: untuk meneruskan referensi variabel ke blok skrip yang sedang berjalan.

Untuk informasi selengkapnya, lihat ForEach-Object.

Periksa modul bawaan yang kompatibel system32 di Windows

Dalam pembaruan Windows 10 1809 dan Windows Server 2019, kami memperbarui sejumlah modul PowerShell bawaan untuk menandainya sebagai kompatibel dengan PowerShell.

Saat PowerShell dimulai, PowerShell secara otomatis menyertakan $windir\System32 sebagai bagian dari variabel lingkungan PSModulePath. Namun, ini hanya mengekspos modul ke Get-Module dan Import-Module jika CompatiblePSEdition ditandai sebagai kompatibel dengan Core.

Anda dapat mengambil alih perilaku ini untuk menampilkan semua modul menggunakan parameter sakelar -SkipEditionCheck. Kami juga telah menambahkan properti PSEdition ke output tabel.

alias -lp untuk semua parameter -LiteralPath

Kami membuat alias parameter standar -lp untuk semua cmdlet PowerShell bawaan yang memiliki parameter -LiteralPath.

Perbaiki Get-Item -LiteralPath a*b jika a*b tidak benar-benar ada untuk mengembalikan kesalahan

Sebelumnya, -LiteralPath yang diberikan wildcard akan memperlakukannya sama dengan -Path dan jika wildcard tidak menemukan file, maka akan keluar tanpa pemberitahuan. Perilaku yang benar adalah bahwa -LiteralPath bersifat literal, jadi jika file tidak ada, itu harus menampilkan kesalahan. Perubahan adalah memperlakukan kartubebas yang digunakan dengan -Literal sebagai harfiah.

Atur direktori kerja ke direktori saat ini di Start-Job

Cmdlet Start-Job sekarang menggunakan direktori saat ini sebagai direktori kerja untuk pekerjaan baru.

Menghapus -Protocol dari cmdlet *-Computer

Karena masalah dengan remoting RPC di CoreFX (terutama pada platform non-Windows) dan untuk memastikan pengalaman remot yang konsisten di PowerShell, parameter -Protocol telah dihapus dari cmdlet \*-Computer. DCOM tidak lagi didukung untuk pengaksesan jarak jauh. Cmdlet berikut hanya khusus mendukung pengendalian jarak jauh WSMAN.

  • Rename-Computer
  • Restart-Computer
  • Stop-Computer

Menghapus -ComputerName dari cmdlet *-Service

Untuk mendorong penggunaan PSRP yang konsisten, parameter -ComputerName dihapus dari cmdlet *-Service.

Perbaiki Get-Content -Delimiter untuk tidak menyertakan pemisah dalam baris yang dikembalikan

Sebelumnya, output saat menggunakan Get-Content -Delimiter tidak konsisten dan tidak nyaman karena diperlukan pemrosesan data lebih lanjut untuk menghapus pemisah. Perubahan ini menghapus pemisah di baris yang dikembalikan.

Perubahan pada Format-Hex

Parameter -Raw sekarang menjadi "no-op" (karena tidak melakukan apa pun). Mulai sekarang semua output ditampilkan dengan representasi angka yang akurat yang mencakup semua byte untuk jenisnya. Inilah yang dilakukan parameter -Raw sebelum perubahan ini.

Perbaikan kesalahan ketik dalam nama properti Get-ComputerInfo

BiosSerialNumber salah eja sebagai BiosSeralNumber dan telah diubah ke ejaan yang benar.

Menambahkan cmdlet Get-StringHash dan Get-FileHash

Perubahan ini adalah bahwa beberapa algoritma hash tidak didukung oleh CoreFX, oleh karena itu mereka tidak lagi tersedia:

  • MACTripleDES
  • RIPEMD160

Menambahkan validasi pada cmdlet Get-* di mana meneruskan $null mengembalikan semua objek alih-alih kesalahan

Meneruskan $null ke salah satu hal berikut ini sekarang melemparkan kesalahan:

  • Get-Credential -UserName
  • Get-Event -SourceIdentifier
  • Get-EventSubscriber -SourceIdentifier
  • Get-Help -Name
  • Get-PSBreakpoint -Script
  • Get-PSProvider -PSProvider
  • Get-PSSessionConfiguration -Name
  • Get-Runspace -Name
  • Get-RunspaceDebug -RunspaceName
  • Get-Service -Name
  • Get-TraceSource -Name
  • Get-Variable -Name

Menambahkan dukungan untuk Format File Log Yang Diperluas W3C di Import-Csv

Sebelumnya, cmdlet Import-Csv tidak dapat digunakan untuk mengimpor file log secara langsung dalam format log yang diperluas W3C dan tindakan tambahan akan diperlukan. Dengan perubahan ini, format log yang diperluas W3C didukung.

Import-Csv menerapkan pstypenames ketika mengimpor, jika informasi jenis ada di CSV

Sebelumnya, objek yang diekspor menggunakan Export-Csv dengan TypeInformation diimpor dengan ConvertFrom-Csv tidak menyimpan informasi jenis. Perubahan ini menambahkan informasi jenis ke anggota pstypenames jika tersedia dari file CSV.

-NoTypeInformation adalah default pada Export-Csv

Sebelumnya, cmdlet Export-Csv akan menghasilkan komentar sebagai baris pertama yang berisi nama jenis objek. Perubahan mengecualikan informasi jenis secara default karena tidak dipahami oleh sebagian besar alat CSV. Perubahan ini dilakukan untuk mengatasi umpan balik pelanggan.

Gunakan -IncludeTypeInformation untuk mempertahankan perilaku sebelumnya.

Izinkan * digunakan dalam jalur registri untuk Remove-Item

Sebelumnya, -LiteralPath yang diberikan wildcard akan memperlakukannya sama dengan -Path dan jika wildcard tidak menemukan file, itu akan keluar secara diam-diam. Perilaku yang benar adalah -LiteralPath dianggap sebagai literal, sehingga jika file tidak ada, seharusnya menghasilkan kesalahan. Perubahan ini adalah memperlakukan karakter pengganti yang digunakan dengan -Literal secara harfiah.

Group-Object sekarang mengurutkan grup

Sebagai bagian dari peningkatan performa, Group-Object sekarang mengembalikan daftar grup yang diurutkan. Meskipun Anda tidak boleh mengandalkan urutan, Anda bisa terpengaruh oleh perubahan ini jika Anda menginginkan grup pertama. Kami memutuskan bahwa peningkatan performa ini sepadan dengan perubahan karena dampak tergantung pada perilaku sebelumnya rendah.

Deviasi standar dalam Measure-Object

Keluaran dari Measure-Object kini menyertakan properti StandardDeviation.

Get-Process | Measure-Object -Property CPU -AllStats
Count             : 308
Average           : 31.3720576298701
Sum               : 9662.59375
Maximum           : 4416.046875
Minimum           :
StandardDeviation : 264.389544720926
Property          : CPU

Get-PfxCertificate -Password

Get-PfxCertificate sekarang memiliki parameter Password, yang memerlukan SecureString. Ini memungkinkan Anda untuk menggunakannya secara non-interaktif:

$certFile = '\\server\share\pwd-protected.pfx'
$certPass = Read-Host -AsSecureString -Prompt 'Enter the password for certificate: '

$certThumbPrint = (Get-PfxCertificate -FilePath $certFile -Password $certPass ).ThumbPrint

Penghapusan fungsi more

Di masa lalu, PowerShell mengirimkan fungsi pada Windows yang disebut more yang dibungkus more.com. Fungsi itu sekarang telah dihapus.

Selain itu, fungsi help berubah untuk menggunakan more.com di Windows, atau pager default sistem yang ditentukan oleh $Env:PAGER pada platform non-Windows.

cd DriveName: sekarang mengembalikan pengguna ke direktori kerja saat ini di drive tersebut

Sebelumnya, menggunakan Set-Location atau cd untuk kembali ke PSDrive yang mengirim pengguna ke lokasi default untuk drive tersebut. Pengguna sekarang diarahkan ke direktori kerja terakhir yang diketahui untuk sesi tersebut.

cd - kembali ke direktori sebelumnya

C:\Windows\System32> cd C:\
C:\> cd -
C:\Windows\System32>

Atau di Linux:

PS /etc> cd /usr/bin
PS /usr/bin> cd -
PS /etc>

Selain itu, cd dan cd -- berubah menjadi $HOME.

Update-Help sebagai non-admin

Karena permintaan yang tinggi, Update-Help tidak perlu lagi dijalankan dengan hak administrator. Update-Help sekarang secara default menyimpan bantuan ke folder khusus pengguna.

Where-Object -Not

Dengan penambahan parameter -Not ke Where-Object, dapat memfilter objek di alur untuk tidak adanya properti, atau nilai properti null/kosong.

Misalnya, perintah ini mengembalikan semua layanan yang tidak memiliki layanan dependen yang ditentukan:

Get-Service | Where-Object -Not DependentServices

Perubahan pada Cmdlet Web

API .NET yang mendasar dari Web Cmdlets telah diubah menjadi System.Net.Http.HttpClient. Perubahan ini memberikan banyak manfaat. Namun, perubahan ini bersama dengan kurangnya interoperabilitas dengan Internet Explorer telah mengakibatkan beberapa perubahan yang merusak dalam Invoke-WebRequest dan Invoke-RestMethod.

  • Invoke-WebRequest sekarang hanya mendukung Penguraian HTML dasar. Invoke-WebRequest selalu mengembalikan objek BasicHtmlWebResponseObject. Properti ParsedHtml dan Forms telah dihapus.
  • nilai BasicHtmlWebResponseObject.Headers sekarang String[] alih-alih String.
  • BasicHtmlWebResponseObject.BaseResponse sekarang menjadi objek System.Net.Http.HttpResponseMessage.
  • Properti Response pada pengecualian Web Cmdlet sekarang menjadi objek System.Net.Http.HttpResponseMessage.
  • Penguraian header RFC yang ketat sekarang default untuk parameter -Headers dan -UserAgent. Ini dapat dilewati dengan -SkipHeaderValidation.
  • skema URI file:// dan ftp:// tidak lagi didukung.
  • pengaturan System.Net.ServicePointManager tidak lagi dihormati.
  • Saat ini tidak ada autentikasi berbasis sertifikat yang tersedia di macOS.
  • Penggunaan -Credential melalui URI http:// akan mengakibatkan kesalahan. Gunakan URI https:// atau berikan parameter -AllowUnencryptedAuthentication untuk menekan kesalahan.
  • -MaximumRedirection sekarang menghasilkan kesalahan penghentian ketika upaya pengalihan melebihi batas yang disediakan alih-alih mengembalikan hasil pengalihan terakhir.
  • Di PowerShell 6.2, perubahan dilakukan ke default pengodean UTF-8 untuk respons JSON. Ketika charset tidak disediakan untuk respons JSON, encoding default harus UTF-8 sesuai dengan RFC 8259.
  • Pengodean default diatur ke UTF-8 untuk respons application-json
  • Menambahkan parameter -SkipHeaderValidation untuk mengizinkan header Content-Type yang tidak sesuai standar.
  • Menambahkan parameter -Form untuk mendukung dukungan multipart/form-data yang disederhanakan
  • Penanganan kunci relasi yang mematuhi dan tidak membedakan huruf besar/kecil
  • Menambahkan parameter -Resume untuk cmdlet web

Invoke-RestMethod mengembalikan info yang berguna saat tidak ada data yang dikembalikan

Ketika API hanya mengembalikan null, Invoke-RestMethod menserialisasikan ini sebagai string "null" alih-alih $null. Perubahan ini memperbaiki logika dalam Invoke-RestMethod untuk membuat serialisasi nilai tunggal JSON yang valid dengan benar null literal sebagai $null.

Cmdlet Web memperingatkan ketika -Credential dikirim melalui koneksi yang tidak terenkripsi

Saat menggunakan HTTP, konten termasuk kata sandi dikirim sebagai teks-jelas. Perubahan ini untuk tidak mengizinkan ini secara default dan mengembalikan kesalahan jika kredensial diteruskan secara tidak aman. Pengguna dapat melewati ini dengan menggunakan sakelar -AllowUnencryptedAuthentication.

Buat parameter -OutFile di cmdlet web agar berfungsi seperti -LiteralPath

Mulai dari PowerShell 7.1, parameter OutFile pada cmdlet web berfungsi seperti LiteralPath dan tidak memproses wildcard.

Perubahan API

Menghapus kelas AddTypeCommandBase

Kelas AddTypeCommandBase dihapus dari Add-Type untuk meningkatkan performa. Kelas ini hanya digunakan oleh cmdlet Add-Type dan tidak boleh berdampak pada pengguna.

Menghapus VisualBasic sebagai bahasa yang didukung dalam Add-Type

Di masa lalu, Anda dapat mengkompilasi kode Visual Basic menggunakan cmdlet Add-Type. Visual Basic jarang digunakan dengan Add-Type. Kami menghapus fitur ini untuk mengurangi ukuran PowerShell.

Menghapus dukungan RunspaceConfiguration

Sebelumnya, saat membuat runspace PowerShell secara terprogram menggunakan API, Anda dapat menggunakan RunspaceConfiguration warisan atau kelas InitialSessionState yang lebih baru. Perubahan ini menghapus dukungan untuk RunspaceConfiguration dan hanya mendukung InitialSessionState.

CommandInvocationIntrinsics.InvokeScript mengikat argumen ke $input alih-alih $args

Posisi parameter yang salah menyebabkan args diteruskan sebagai input, bukan sebagai args.

Menghapus properti ClrVersion dan BuildVersion dari $PSVersionTable

Properti ClrVersion dari $PSVersionTable tidak bermanfaat dengan CoreCLR. Pengguna akhir tidak boleh menggunakan nilai tersebut untuk menentukan kompatibilitas.

Properti BuildVersion terkait dengan versi build Windows, yang tidak tersedia di platform non-Windows. Gunakan properti GitCommitId untuk mengambil versi build PowerShell yang tepat.

Menerapkan penguraian escape Unicode

`u#### atau `u{####} dikonversi ke karakter Unicode yang sesuai. Untuk menghasilkan `uharfiah, lolos dari backtick: ``u.

Masalah pengikatan parameter dengan ValueFromRemainingArguments dalam fungsi PS

ValueFromRemainingArguments sekarang mengembalikan nilai-nilai dalam bentuk array alih-alih satu nilai tunggal yang sebelumnya merupakan array.

Membersihkan penggunaan CommandTypes.Workflow dan WorkflowInfoCleaned

Bersihkan kode yang terkait dengan penggunaan CommandTypes.Workflow dan WorkflowInfo di System.Management.Automation.

Perubahan pemecahan kecil ini terutama memengaruhi kode penyedia bantuan.

  • Ubah konstruktor publik WorkflowInfo menjadi internal. Kami tidak mendukung alur kerja lagi, jadi masuk akal untuk tidak mengizinkan orang membuat instans Workflow.
  • Hapus jenis System.Management.Automation.DebugSource karena hanya digunakan untuk penelusuran kesalahan alur kerja.
  • Hapus kelebihan beban SetParent dari kelas abstrak Debugger yang hanya digunakan untuk penelusuran kesalahan alur kerja.
  • Hapus overload SetParent yang sama dari kelas turunan RemotingJobDebugger.

Jangan membungkus hasil pengembalian dalam PSObject saat mengonversi ScriptBlock ke delegat.

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

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

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

Dukungan Jarak Jauh

PowerShell Remoting (PSRP) menggunakan WinRM pada platform Unix memerlukan NTLM/Negosiasi atau Autentikasi Dasar melalui HTTPS. PSRP di macOS hanya mendukung Autentikasi Dasar melalui HTTPS. Autentikasi berbasis Kerberos tidak didukung untuk platform non-Windows.

PowerShell juga mendukung PowerShell Remoting (PSRP) melalui SSH di semua platform (Windows, macOS, dan Linux). Untuk informasi selengkapnya, lihat SSH remoting di PowerShell.

PowerShell Direct untuk Container mencoba menggunakan pwsh terlebih dahulu

PowerShell Direct adalah fitur PowerShell dan Hyper-V yang memungkinkan Anda terhubung ke Hyper-V VM atau Kontainer tanpa konektivitas jaringan atau layanan manajemen jarak jauh lainnya.

Di masa lalu, PowerShell Direct tersambung menggunakan instans Windows PowerShell bawaan pada Kontainer. Sekarang, PowerShell Direct pertama kali mencoba menyambungkan dengan menggunakan pwsh.exe yang tersedia pada variabel lingkungan PATH. Jika pwsh.exe tidak tersedia, PowerShell Direct akan kembali menggunakan powershell.exe.

Enable-PSRemoting sekarang membuat titik akhir jarak jauh terpisah untuk versi pratinjau

Enable-PSRemoting sekarang membuat dua konfigurasi sesi jarak jauh:

  • Satu untuk versi utama PowerShell. Contohnya, PowerShell.6. Titik akhir yang dapat diandalkan melalui pembaruan versi minor sebagai konfigurasi sesi PowerShell 6 seluruh sistem
  • Satu konfigurasi sesi yang khusus untuk versi, misalnya: PowerShell.6.1.0

Perilaku ini berguna jika Anda ingin menginstal beberapa versi PowerShell 6 dan dapat diakses pada komputer yang sama.

Selain itu, versi pratinjau PowerShell sekarang mendapatkan konfigurasi sesi jarak jauh mereka sendiri setelah menjalankan cmdlet Enable-PSRemoting:

C:\WINDOWS\system32> Enable-PSRemoting

Output Anda mungkin berbeda jika Anda belum menyiapkan WinRM sebelumnya.

WinRM is already set up to receive requests on this computer.
WinRM is already set up for remote management on this computer.

Kemudian Anda dapat melihat konfigurasi sesi PowerShell terpisah untuk pratinjau dan build PowerShell 6 yang stabil, dan untuk setiap versi tertentu.

Get-PSSessionConfiguration
Name          : PowerShell.6.2-preview.1
PSVersion     : 6.2
StartupScript :
RunAsUser     :
Permission    : NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed

Name          : PowerShell.6-preview
PSVersion     : 6.2
StartupScript :
RunAsUser     :
Permission    : NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed

Name          : powershell.6
PSVersion     : 6.1
StartupScript :
RunAsUser     :
Permission    : NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed

Name          : powershell.6.1.0
PSVersion     : 6.1
StartupScript :
RunAsUser     :
Permission    : NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed

sintaks user@host:port didukung untuk SSH

Klien SSH biasanya mendukung string koneksi dalam format user@host:port. Dengan penambahan SSH sebagai protokol untuk PowerShell Remoting, kami telah menambahkan dukungan untuk format string koneksi ini:

Enter-PSSession -HostName fooUser@ssh.contoso.com:2222

Telemetri hanya dapat dinonaktifkan dengan variabel lingkungan

PowerShell mengirim data telemetri dasar ke Microsoft saat diluncurkan. Data ini mencakup nama OS, versi OS, dan versi PowerShell. Data ini memungkinkan kami untuk lebih memahami lingkungan tempat PowerShell digunakan dan memungkinkan kami memprioritaskan fitur dan perbaikan baru.

Untuk menolak telemetri ini, atur variabel lingkungan POWERSHELL_TELEMETRY_OPTOUT ke true, yes, atau 1. Kami tidak lagi mendukung penghapusan file DELETE_ME_TO_DISABLE_CONSOLEHOST_TELEMETRY untuk menonaktifkan telemetri.