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.
Deskripsi singkat
Edisi PowerShell yang berbeda berjalan pada runtime yang mendasari yang berbeda.
Deskripsi panjang
Dari PowerShell 5.1, ada beberapa edisi PowerShell yang masing-masing berjalan pada runtime .NET yang berbeda. Pada PowerShell 6.0 ada dua edisi PowerShell:
- Desktop, yang berjalan pada .NET Framework. PowerShell 4 ke bawah, serta PowerShell 5.1 tersedia untuk edisi Windows berfungsi lengkap seperti Windows Desktop, Windows Server, Windows Server Core dan sebagian besar sistem operasi Windows lainnya. Ini adalah edisi PowerShell asli dan disertakan dalam penginstalan default sistem operasi.
- Core, yang berjalan pada .NET Core. PowerShell 6.0 dan yang lebih baru diinstal bersama-sama dengan rilis PowerShell yang lebih lama pada edisi Windows berfitur lengkap, beberapa edisi Windows dengan jejak kecil seperti Windows Nano Server dan Windows IoT, atau pada platform non-Windows seperti Linux dan macOS.
Karena edisi PowerShell sesuai dengan runtime .NET-nya, ini adalah indikator utama kompatibilitas modul .NET API dan PowerShell; beberapa API .NET, jenis, atau metode tidak tersedia dalam runtime .NET dan ini memengaruhi skrip dan modul PowerShell yang bergantung padanya.
Variabel $PSEdition otomatis
Di PowerShell 5.1 ke atas, Anda dapat mengetahui edisi apa yang Anda jalankan dengan variabel otomatis $PSEdition:
$PSEdition
Core
Di PowerShell 4 ke bawah, variabel ini tidak ada.
$PSEdition yang kosong harus diperlakukan sama dengan memiliki nilai Desktop.
Edisi dalam $PSVersionTable
Variabel otomatis $PSVersionTable juga memiliki properti PSEdition di PowerShell 5.1 dan versi berikutnya:
$PSVersionTable
Name Value
---- -----
PSVersion 7.3.9
PSEdition Core
GitCommitId 7.3.9
OS Microsoft Windows 10.0.22621
Platform Win32NT
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0
Bidang PSEdition
Bidang CompatiblePSEditions manifes modul
Modul PowerShell dapat mendeklarasikan edisi PowerShell apa yang kompatibel dengannya menggunakan bidang CompatiblePSEditions manifes modul.
Misalnya, manifes modul yang menyatakan kompatibilitas dengan PowerShell edisi Desktop dan Core:
@{
ModuleVersion = '1.0'
FunctionsToExport = @('Test-MyModule')
CompatiblePSEditions = @('Desktop', 'Core')
}
Contoh manifes modul dengan kompatibilitas hanya Desktop:
@{
ModuleVersion = '1.0'
FunctionsToExport = @('Test-MyModule')
CompatiblePSEditions = @('Desktop')
}
Menghilangkan bidang CompatiblePSEditions dari manifes modul akan memiliki efek yang sama seperti mengaturnya ke Desktop, karena modul yang dibuat sebelum bidang ini diperkenalkan secara implisit ditulis untuk edisi ini.
Untuk modul yang tidak dikirim sebagai bagian dari Windows (yaitu modul yang Anda tulis atau instal dari galeri), bidang ini hanya informasi; PowerShell tidak mengubah perilaku berdasarkan bidang CompatiblePSEditions, tetapi mengeksposnya pada objek PSModuleInfo (dikembalikan oleh Get-Module) untuk logika Anda sendiri:
$newModuleManifestSplat = @{
Path = '.\TestModuleWithEdition.psd1'
CompatiblePSEditions = 'Desktop', 'Core'
PowerShellVersion = '5.1'
}
New-ModuleManifest @newModuleManifestSplat
$ModuleInfo = Test-ModuleManifest -Path .\TestModuleWithEdition.psd1
$ModuleInfo.CompatiblePSEditions
Desktop
Core
Nota
Bidang modul CompatiblePSEditions hanya kompatibel dengan PowerShell 5.1 ke atas. Termasuk bidang ini akan menyebabkan modul tidak kompatibel dengan PowerShell 4 ke bawah. Karena bidang ini murni informasi, bidang dapat dihilangkan dengan aman di versi PowerShell yang lebih baru.
Di PowerShell 6.1, Get-Module -ListAvailable telah memperbarui formatternya untuk menampilkan kompatibilitas edisi setiap modul:
Get-Module -ListAvailable
Directory: C:\Users\me\Documents\PowerShell\Modules
ModuleType Version Name PSEdition ExportedCommands
---------- ------- ---- --------- ----------------
Script 1.4.0 Az Core,Desk
Script 1.3.1 Az.Accounts Core,Desk {Disable-AzDataCollection, Disable-AzContextAutosave, E...
Script 1.0.1 Az.Aks Core,Desk {Get-AzAks, New-AzAks, Remove-AzAks, Import-AzAksCreden...
...
Script 4.4.0 Pester Desk {Describe, Context, It, Should...}
Script 1.18.0 PSScriptAnalyzer Desk {Get-ScriptAnalyzerRule, Invoke-ScriptAnalyzer, Invoke-...
Script 1.0.0 WindowsCompatibility Core {Initialize-WinSession, Add-WinFunction, Invoke-WinComm...
Kompatibilitas edisi untuk modul yang dikirim sebagai bagian dari Windows
Untuk modul yang berasal dari Windows (atau diinstal sebagai bagian dari peran atau fitur), PowerShell 6.1 ke atas memperlakukan bidang CompatiblePSEditions secara berbeda. Modul tersebut ditemukan di direktori modul sistem Windows PowerShell (%windir%\System\WindowsPowerShell\v1.0\Modules).
Untuk modul yang dimuat dari atau ditemukan di direktori ini, PowerShell 6.1 ke atas menggunakan bidang CompatiblePSEditions untuk menentukan apakah modul akan kompatibel dengan sesi saat ini dan berperilaku sesuai.
Ketika Import-Module digunakan, modul tanpa Core di CompatiblePSEditions tidak akan diimpor dan kesalahan akan ditampilkan:
Import-Module BitsTransfer
Import-Module : Module 'C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\BitsTransfer\BitsTransfer.psd1'
does not support current PowerShell edition 'Core'. Its supported editions are 'Desktop'. Use 'Import-Module
-SkipEditionCheck' to ignore the compatibility of this module.
At line:1 char:1
+ Import-Module BitsTransfer
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ResourceUnavailable: (C:\WINDOWS\system32\u2026r\BitsTransfer.psd1:String)
[Import-Module], InvalidOperationException
+ FullyQualifiedErrorId : Modules_PSEditionNotSupported,Microsoft.PowerShell.Commands.ImportModuleCommand
Ketika Get-Module -ListAvailable digunakan, modul tanpa Core di CompatiblePSEditions tidak akan ditampilkan:
Get-Module -ListAvailable BitsTransfer
# No output
Dalam kedua kasus, parameter sakelar -SkipEditionCheck dapat digunakan untuk mengambil alih perilaku ini:
Get-Module -ListAvailable -SkipEditionCheck BitsTransfer
Directory: C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules
ModuleType Version Name PSEdition ExportedCommands
---------- ------- ---- --------- ----------------
Manifest 2.0.0.0 BitsTransfer Desk {Add-BitsFile, Complete-BitsTransfer, Get-BitsTransfer,...
Peringatan
Import-Module -SkipEditionCheck mungkin berhasil untuk modul, tetapi menggunakan modul tersebut menanggung risiko mengalami ketidaksesuaian di kemudian hari; saat memuat modul awalnya berhasil, perintah nantinya dapat memanggil API yang tidak kompatibel dan kemudian gagal secara tiba-tiba.
Menulis modul PowerShell untuk kompatibilitas silang edisi
Saat menulis modul PowerShell untuk menargetkan edisi PowerShell Desktop dan Core, ada hal-hal yang dapat Anda lakukan untuk memastikan kompatibilitas lintas edisi.
Satu-satunya cara yang benar untuk mengonfirmasi dan terus memvalidasi kompatibilitas adalah dengan menulis pengujian untuk skrip atau modul Anda dan menjalankannya di semua versi dan edisi PowerShell yang anda butuhkan kompatibilitasnya. Kerangka kerja pengujian yang direkomendasikan untuk ini adalah Pester.
Skrip PowerShell
Sebagai bahasa, PowerShell bekerja sama di antara edisi; ini adalah cmdlet, modul, dan API .NET yang Anda gunakan yang dipengaruhi oleh kompatibilitas edisi.
Umumnya, skrip yang berfungsi di PowerShell 6.1 ke atas akan berfungsi dengan Windows PowerShell 5.1, tetapi ada beberapa pengecualian.
PSScriptAnalyzer versi 1.18+ memiliki aturan seperti PSUseCompatibleCommands dan PSUseCompatibleTypes yang dapat mendeteksi kemungkinan penggunaan perintah dan API .NET yang tidak kompatibel dalam skrip PowerShell.
Rakitan .NET
Jika Anda menulis modul biner atau modul yang menggabungkan rakitan .NET (DLL) yang dihasilkan dari kode sumber, Anda harus mengkompilasi terhadap .NET Standard
Meskipun pustaka ini dapat memeriksa beberapa kompatibilitas pada waktu kompilasi, pustaka ini tidak akan dapat menangkap kemungkinan perbedaan perilaku antara edisi. Untuk ini Anda masih harus menulis tes.
Lihat juga
- tentang_Variabel_Otomatis
- Get-Module
-
Import-Module - Edisi PowerShell yang Kompatibel dengan Modul