Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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.
- Apa yang baru dalam PowerShell 7.5
- Apa yang baru di PowerShell 7.4
- Apa yang baru di PowerShell 7.3
- Apa yang baru dalam PowerShell 7.2
- Apa yang baru dalam PowerShell 7.1
- Apa yang baru di PowerShell 7.0
- Apa yang baru di PowerShell 6.x
.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:
- tentang_Kompatibilitas_Windows_PowerShell
- kompatibilitas modul PowerShell 7
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 sepertipwsh foo.ps1
ataupwsh fooScript
tanpa menentukan-File
. Namun, perubahan ini mengharuskan Anda secara eksplisit menentukan-c
atau-Command
saat mencoba menjalankan perintah sepertipwsh.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
daripwsh.exe
. - Mengubah
pwsh -Version
dan bantuan bawaan untukpwsh.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 -Encoding
Byte
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 $args
berubah.
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.
- Nonaktifkan-FiturEksperimental
- Aktifkan-FiturEksperimental
- Get-ExperimentalFeature
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-Error
yang 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 objekBasicHtmlWebResponseObject
. PropertiParsedHtml
danForms
telah dihapus. - nilai
BasicHtmlWebResponseObject.Headers
sekarangString[]
alih-alihString
. -
BasicHtmlWebResponseObject.BaseResponse
sekarang menjadi objekSystem.Net.Http.HttpResponseMessage
. - Properti
Response
pada pengecualian Web Cmdlet sekarang menjadi objekSystem.Net.Http.HttpResponseMessage
. - Penguraian header RFC yang ketat sekarang default untuk parameter
-Headers
dan-UserAgent
. Ini dapat dilewati dengan-SkipHeaderValidation
. - skema URI
file://
danftp://
tidak lagi didukung. - pengaturan
System.Net.ServicePointManager
tidak lagi dihormati. - Saat ini tidak ada autentikasi berbasis sertifikat yang tersedia di macOS.
- Penggunaan
-Credential
melalui URIhttp://
akan mengakibatkan kesalahan. Gunakan URIhttps://
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 headerContent-Type
yang tidak sesuai standar. - Menambahkan parameter
-Form
untuk mendukung dukunganmultipart/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 `u
harfiah, 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 instansWorkflow
. - 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. JadiPSObject
tidak diperlukan. - Ketika tipe pengembalian delegasi adalah
object
, itu akan dibungkus dalamPSObject
, 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.