Bagikan melalui


Perbedaan PowerShell pada platform non-Windows

PowerShell berusaha untuk menyediakan paritas fitur di semua platform yang didukung. Namun, beberapa fitur berulah secara berbeda atau tidak tersedia karena perbedaan .NET Core dan perbedaan khusus platform. Perubahan lain dilakukan untuk meningkatkan interoperabilitas PowerShell pada platform non-Windows.

.NET Framework vs .NET Core

PowerShell di Linux dan macOS menggunakan .NET Core, subset dari .NET Framework lengkap di Microsoft Windows. 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 Melanggar perubahan untuk migrasi dari .NET Framework ke .NET Core.

Perubahan interoperabilitas Unix umum

  • Menambahkan dukungan untuk globbing perintah asli pada platform Unix. Ini berarti Anda dapat menggunakan kartubebas dengan perintah asli seperti ls *.txt.
  • Fungsionalitas more menghormati Linux $PAGER dan default ke less.
  • Garis miring terbelakang secara otomatis lolos saat berhadapan dengan argumen perintah asli.
  • Memperbaiki ConsoleHost untuk menghormati NoEcho platform Unix.
  • Jangan tambahkan PATHEXT variabel lingkungan di Unix.
  • Halaman powershell manusia disertakan dalam paket.

Kebijakan eksekusi

PowerShell mengabaikan kebijakan eksekusi saat berjalan pada platform non-Windows. Get-ExecutionPolicymengembalikan Unrestricted di Linux dan macOS. Set-ExecutionPolicy tidak melakukan apa pun di Linux dan macOS.

Sensitivitas huruf besar/kecil di PowerShell

Secara historis, PowerShell secara seragam tidak peka huruf besar/kecil, dengan beberapa pengecualian. Pada sistem operasi seperti UNIX, sistem file sebagian besar peka huruf besar/kecil, dan PowerShell mematuhi standar sistem file.

  • Anda harus menggunakan kasus yang benar saat nama file ditentukan di PowerShell.
  • Jika skrip mencoba memuat modul dan nama modul tidak ditangani dengan benar, maka beban modul gagal. Perilaku ini dapat menyebabkan masalah dengan skrip yang ada jika nama yang dirujuk oleh modul tidak cocok dengan kasus yang tepat dari nama file aktual.
  • Meskipun nama dalam sistem file peka huruf besar/kecil, penyelesaian tab nama file tidak peka huruf besar/kecil. Penyelesaian tab menelusuri daftar nama menggunakan pencocokan yang tidak peka huruf besar/kecil.
  • Get-Help mendukung pencocokan pola yang tidak peka huruf besar/kecil pada platform Unix.
  • Import-Module tidak peka huruf besar/kecil saat digunakan dengan nama file untuk menentukan nama modul.

Dukungan sistem file untuk Linux dan macOS

  • Jalur yang diberikan ke cmdlet sekarang slash-agnostic (keduanya / dan \ bekerja sebagai pemisah direktori)
  • Spesifikasi Direktori Dasar XDG sekarang dihormati dan digunakan secara default:
    • Jalur profil Linux/macOS terletak di ~/.config/powershell/profile.ps1
    • Jalur penyimpanan riwayat terletak di ~/.local/share/powershell/PSReadline/ConsoleHost_history.txt
    • Jalur modul pengguna terletak di ~/.local/share/powershell/Modules
  • Dukungan untuk nama file dan folder yang berisi karakter titik dua di Unix.
  • Dukungan untuk nama skrip atau jalur lengkap yang memiliki koma.
  • Deteksi kapan parameter LiteralPath digunakan untuk menekan ekspansi kartubebas untuk cmdlet navigasi.
  • Diperbarui Get-ChildItem untuk bekerja lebih seperti *nix ls -R dan perintah asli Windows DIR /S . Get-ChildItem sekarang mengembalikan tautan simbolis yang ditemui selama pencarian rekursif dan tidak mencari direktori yang ditargetkan tautan tersebut.

Ekstensi File .PS1

Skrip PowerShell harus berakhir .ps1 agar penerjemah memahami cara memuat dan menjalankannya dalam proses saat ini. Menjalankan skrip dalam proses saat ini adalah perilaku yang diharapkan untuk PowerShell. Anda dapat menambahkan #! nomor ajaib ke skrip yang tidak memiliki .ps1 ekstensi, tetapi ini menyebabkan skrip dijalankan dalam instans PowerShell baru, mencegah skrip berfungsi dengan benar saat bertukar objek. Perilaku ini mungkin diinginkan saat menjalankan skrip PowerShell dari Bash atau shell lain.

Alias kenyamanan dihapus

PowerShell menyediakan sekumpulan alias di Windows yang memetakan ke nama perintah Linux untuk kenyamanan pengguna. Di Linux dan macOS, "alias kenyamanan" untuk perintah lsdasar , , , catcprmmanmvmountdan ps dihapus untuk memungkinkan executable asli berjalan tanpa menentukan jalur.

Pencatatan

Di macOS, PowerShell menggunakan API asli os_log untuk masuk ke sistem pengelogan terpadu Apple. Di Linux, PowerShell menggunakan Syslog, solusi pengelogan di mana-mana.

Kontrol Pekerjaan

Tidak ada dukungan kontrol pekerjaan bergaya Unix di PowerShell di Linux atau macOS. Perintah fg dan bg tidak tersedia. Namun, Anda dapat menggunakan pekerjaan PowerShell yang berfungsi di semua platform.

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

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.

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

Dukungan Just-Enough-Administration (JEA)

PowerShell di Linux atau macOS tidak memungkinkan Anda membuat titik akhir jarak jauh administrasi terbatas (JEA).

sudo, , execdan PowerShell

Karena PowerShell menjalankan sebagian besar perintah dalam memori (seperti Python atau Ruby), Anda tidak dapat menggunakan sudo langsung dengan bawaan PowerShell. Anda dapat menjalankan pwsh dari sudo. Jika perlu menjalankan cmdlet PowerShell dari dalam PowerShell dengan sudo, misalnya, sudo Set-Date 8/18/2016, maka Anda akan menggunakan sudo pwsh Set-Date 8/18/2016.

Modul yang disertakan pada platform non-Windows

Untuk platform non-Windows, PowerShell menyertakan modul berikut:

  • Microsoft.PowerShell.Archive
  • Microsoft.PowerShell.Core
  • Microsoft.PowerShell.Host
  • Microsoft.PowerShell.Management
  • Microsoft.PowerShell.Security
  • Microsoft.PowerShell.Utility
  • PackageManagement
  • PowerShellGet
  • PSReadLine
  • ThreadJob

Sejumlah besar perintah (cmdlet) yang umumnya tersedia di PowerShell tidak tersedia di Linux atau macOS. Seringkali, perintah ini tidak berlaku untuk platform ini. Misalnya, perintah untuk fitur khusus Windows seperti registri atau layanan tidak tersedia. Perintah lain, seperti Set-ExecutionPolicy, ada tetapi tidak berfungsi.

Untuk daftar modul dan cmdlet yang komprehensif serta platform yang mereka dukung, lihat Riwayat rilis modul dan cmdlet.

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.Operation.Validation
  • PSScheduledJob
  • PSWorkflow
  • PSWorkflowUtility

Modul khusus Windows berikut ini tidak disertakan dalam PowerShell untuk Linux atau macOS.

  • CimCmdlets
  • Microsoft.PowerShell.Diagnostics
  • Microsoft.WSMan.Management
  • PSDiagnostics

Cmdlet tidak tersedia di platform non-Windows

Beberapa cmdlet dihapus dari PowerShell. Yang lain tidak tersedia atau mungkin bekerja secara berbeda pada platform non-Windows. Untuk daftar cmdlet komprehensif yang dihapus dari PowerShell, lihat Cmdlet yang dihapus dari PowerShell.

Microsoft.PowerShell.Core

Cmdlet berikut tidak tersedia di Linux atau macOS:

  • Disable-PSRemoting
  • Enable-PSRemoting
  • Connect-PSSession
  • Disconnect-PSSession
  • Receive-PSSession
  • Get-PSSessionCapability
  • Disable-PSSessionConfiguration
  • Enable-PSSessionConfiguration
  • Get-PSSessionConfiguration
  • Register-PSSessionConfiguration
  • Set-PSSessionConfiguration
  • Unregister-PSSessionConfiguration
  • Test-PSSessionConfigurationFile

Parameter ShowWindow Get-Help tidak tersedia untuk platform non-Windows. PowerShell 7.3 menambahkan Switch-Process cmdlet dan exec fungsi untuk Linux dan macOS. Perintah ini tidak tersedia di Windows.

Cmdlet Microsoft.PowerShell.Security

Cmdlet berikut tidak tersedia di Linux atau macOS:

  • Get-Acl
  • Set-Acl
  • Get-AuthenticodeSignature
  • Set-AuthenticodeSignature
  • New-FileCatalog
  • Test-FileCatalog

Cmdlet ini hanya tersedia mulai dari PowerShell 7.1.

  • Get-CmsMessage
  • Protect-CmsMessage
  • Unprotect-CmsMessage

Cmdlet Microsoft.PowerShell.Management

Cmdlet berikut tidak tersedia di Linux dan macOS:

  • Rename-Computer
  • Get-ComputerInfo
  • Get-HotFix
  • Clear-RecycleBin
  • Get-Service
  • New-Service
  • Remove-Service
  • Restart-Service
  • Resume-Service
  • Set-Service
  • Start-Service
  • Stop-Service
  • Suspend-Service
  • Set-TimeZone

Cmdlet berikut tersedia dengan batasan:

  • Get-Clipboard - tersedia di PowerShell 7.0+
  • Set-Clipboard - tersedia di PowerShell 7.0+
  • Restart-Computer - tersedia untuk Linux dan macOS di PowerShell 7.1+
  • Stop-Computer - tersedia untuk Linux dan macOS di PowerShell 7.1+

Cmdlet Microsoft.PowerShell.Utility

Cmdlet berikut tidak tersedia di Linux dan macOS:

  • Convert-String
  • ConvertFrom-String
  • ConvertFrom-SddlString
  • Out-GridView
  • Out-Printer
  • Show-Command

Alias tidak tersedia di Linux atau macOS

Tabel berikut mencantumkan alias yang tersedia untuk Windows yang tidak tersedia di platform non-Windows. Alias ini tidak tersedia karena alias bertentangan dengan perintah asli pada platform tersebut.

Alias Cmdlet
ac Add-Content
cat Get-Content
clear Clear-Host
compare Compare-Object
cp Copy-Item
cpp Copy-ItemProperty
diff Compare-Object
kill Stop-Process
ls Get-ChildItem
man help
mount New-PSDrive
mv Move-Item
ps Get-Process
rm Remove-Item
rmdir Remove-Item
sleep Start-Sleep
sort Sort-Object
start Start-Process
tee Tee-Object
write Write-Output

Tabel tidak menyertakan alias tidak tersedia untuk cmdlet yang tidak ada di platform non-Windows.

Konfigurasi Status yang Diinginkan PowerShell (DSC)

Dimulai dengan PowerShell 7.2, modul PSDesiredStateConfiguration dihapus dari PowerShell dan diterbitkan di Galeri PowerShell. Untuk informasi selengkapnya, lihat pengumuman di blog Tim PowerShell. Untuk informasi selengkapnya tentang menggunakan DSC di Linux, lihat Mulai menggunakan DSC untuk Linux. DSC v1.1 dan v2.x tidak didukung di macOS. DSC v3 didukung di Windows, Linux, dan macOS, tetapi masih dalam pengembangan awal.