Perbedaan PowerShell pada platform non-Windows

PowerShell berusaha untuk menyediakan paritas fitur di semua platform yang didukung. Tetapi, karena perbedaan dalam .NET Core dan perbedaan khusus platform, beberapa fitur ber perilaku berbeda atau tidak tersedia. Perubahan tambahan telah dilakukan untuk meningkatkan interoperabilitas PowerShell pada platform non-Windows.

.NET Framework vs .NET Core

PowerShell di Linux dan macOS menggunakan .NET Core, yang merupakan 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 perintah asli globbing pada platform Unix. Ini berarti Anda dapat menggunakan kartubebas dengan perintah asli seperti ls *.txt.
  • Fungsionalitas more menghormati Linux $PAGER dan default ke less.
  • Backslash berikutnya secara otomatis lolos saat berhadapan dengan argumen perintah asli.
  • Memperbaiki ConsoleHost untuk menghormati NoEcho platform Unix.
  • jangan tambahkan PATHEXT variabel lingkungan pada Unix
  • Halaman powershell manusia disertakan dalam paket

Kebijakan eksekusi

Parameter -ExecutionPolicy diabaikan saat menjalankan PowerShell pada platform non-Windows. Get-ExecutionPolicy mengembalikan 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.

  • Saat menentukan file di PowerShell, kasus yang benar harus digunakan.
  • Jika skrip mencoba memuat modul dan nama modul tidak di-case dengan benar, maka beban modul gagal. Ini dapat menyebabkan masalah dengan skrip yang ada jika nama yang dirujuk 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 menggunakan nama file untuk menentukan nama modul.

Dukungan sistem file untuk Linux dan macOS

  • Jalur yang diberikan ke cmdlet sekarang slash-agnostic (baik / 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 -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 biasa yang diharapkan untuk PowerShell. Nomor #! ajaib dapat ditambahkan ke skrip yang tidak memiliki .ps1 ekstensi, tetapi ini menyebabkan skrip dijalankan dalam instans PowerShell baru yang mencegah skrip berfungsi dengan baik saat bertukar objek. Ini mungkin perilaku yang diinginkan saat menjalankan skrip PowerShell dari bash atau shell lain.

Alias kenyamanan dihapus

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

Pembuatan Log

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. Anda dapat menggunakan pekerjaan PowerShell yang melakukan pekerjaan 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 juga dijalankan di direktori saat ini alih-alih direktori asal pengguna.

Dukungan Akses 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, macOS, dan Linux). Untuk informasi selengkapnya, lihat Akses jauh SSH di PowerShell.

Dukungan Just-Enough-Administration (JEA)

Kemampuan untuk membuat titik akhir jarak jauh administrasi terbatas (JEA) tidak tersedia di PowerShell di Linux atau macOS.

sudo, exec, dan PowerShell

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

Cmdlet hilang

Sejumlah besar perintah (cmdlet) yang biasanya tersedia di PowerShell tidak tersedia di Linux atau macOS. Dalam banyak kasus, perintah ini tidak masuk akal pada platform ini (misalnya fitur khusus Windows seperti registri). Perintah lain seperti perintah kontrol layanan ada, tetapi tidak berfungsi. Rilis di masa mendatang dapat memperbaiki masalah ini dengan memperbaiki cmdlet yang rusak dan menambahkan yang baru dari waktu ke waktu.

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

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
  • PSDesiredStateConfiguration
  • PSReadLine
  • ThreadJob

Namun, beberapa cmdlet telah dihapus dari PowerShell, dan yang lain tidak tersedia atau mungkin bekerja secara berbeda pada platform non-Windows. Untuk daftar lengkap cmdlet yang dihapus dari PowerShell, lihat Cmdlet yang dihapus dari PowerShell.

Microsoft.PowerShell.Core

Parameter ShowWindowGet-Help tidak tersedia untuk platform non-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:

  • Clear-RecycleBin
  • Get-HotFix

Cmdlet berikut tersedia dengan batasan:

Get-Clipboard - tersedia di Linux tetapi tidak didukung di macOS 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
  • 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 cmdlet target tidak tersedia atau alias bertentangan dengan perintah asli pada platform tersebut.

Alias Cmdlet
ac Add-Content
cat Get-Content
clear Clear-Host
cnsn Connect-PSSession
compare Compare-Object
cp Copy-Item
cpp Copy-ItemProperty
diff Compare-Object
dnsn Disconnect-PSSession
gsv Get-Service
kill Stop-Process
ls Get-ChildItem
man help
mount New-PSDrive
mv Move-Item
ogv Out-GridView
ps Get-Process
rm Remove-Item
rmdir Remove-Item
sasv Start-Service
shcm Show-Command
sleep Start-Sleep
sort Sort-Object
spsv Stop-Service
start Start-Process
tee Tee-Object
write Write-Output

Konfigurasi Status yang Diinginkan PowerShell (DSC)

Banyak cmdlet dihapus dari modul PSDesiredStateConfiguration yang dimulai di PowerShell 6.0. Dukungan untuk DSC pada platform non-Windows terbatas dan sebagian besar bersifat eksperimental. Invoke-DscResource Cmdlet dipulihkan sebagai fitur eksperimental di PowerShell 7.0.

DSC tidak didukung di macOS.

Untuk informasi selengkapnya tentang menggunakan DSC di Linux, lihat Mulai menggunakan DSC untuk Linux.

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