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 ditulis untuk .NET Framework sementara PowerShell Core ditulis untuk .NET Core. Modul portabel adalah modul yang berfungsi di Windows PowerShell dan PowerShell Core. Meskipun .NET Framework dan .NET Core sangat kompatibel, ada perbedaan dalam API yang tersedia antara keduanya. Ada juga perbedaan dalam API yang tersedia di Windows PowerShell dan PowerShell Core. Modul yang dimaksudkan untuk digunakan di kedua lingkungan perlu mengetahui perbedaan ini.
Memindahkan modul yang ada
Memporting sebuah PSSnapIn
PowerShell SnapIns tidak didukung di PowerShell Core. Namun, mudah untuk mengonversi PSSnapIn ke modul PowerShell. Biasanya, kode pendaftaran PSSnapIn berada dalam satu file sumber yang merupakan kelas turunan dari PSSnapIn. Hapus file sumber ini dari build; itu tidak lagi diperlukan.
Gunakan New-ModuleManifest untuk membuat manifes modul baru yang menggantikan kebutuhan akan kode pendaftaran PSSnapIn. Beberapa nilai dari PSSnapIn (seperti Description) dapat digunakan kembali dalam manifes modul.
Properti RootModule dalam manifes modul harus diatur menjadi nama dari assembly (.dll
) yang mengimplementasikan cmdlet.
.NET Portability Analyzer (alias APIPort)
Untuk mem-port modul yang ditulis untuk Windows PowerShell agar berfungsi dengan PowerShell Core, mulailah dengan .NET Portability Analyzer. Jalankan alat ini terhadap rakitan yang dikompilasi untuk menentukan apakah API .NET yang digunakan dalam modul kompatibel dengan .NET Framework, .NET Core, dan runtime .NET lainnya. Alat ini menyarankan API alternatif jika ada. Jika tidak, Anda mungkin perlu menambahkan pemeriksaan runtime dan membatasi kemampuan yang tidak tersedia dalam runtime tertentu.
Membuat modul baru
Jika membuat modul baru, rekomendasinya adalah menggunakan .NET CLI.
Menginstal templat modul PowerShell Standard
Setelah .NET CLI diinstal, instal pustaka templat untuk menghasilkan modul PowerShell sederhana. Modul ini akan kompatibel dengan Windows PowerShell, PowerShell Core, Windows, Linux, dan macOS.
Contoh berikut menunjukkan cara menginstal templat:
dotnet new install Microsoft.PowerShell.Standard.Module.Template
The following template packages will be installed:
Microsoft.PowerShell.Standard.Module.Template
Success: Microsoft.PowerShell.Standard.Module.Template::0.1.3 installed the following templates:
Template Name Short Name Language Tags
-------------------------- ---------- -------- -------------------------
PowerShell Standard Module psmodule [C#] Library/PowerShell/Module
Membuat proyek modul baru
Setelah templat diinstal, Anda dapat membuat proyek modul PowerShell baru menggunakan templat tersebut. Dalam contoh ini, modul sampel disebut 'myModule'.
PS> mkdir myModule
Directory: C:\Users\Steve
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 8/3/2018 2:41 PM myModule
PS> cd myModule
PS C:\Users\Steve\myModule> dotnet new psmodule
The template "PowerShell Standard Module" was created successfully.
Processing post-creation actions...
Restoring C:\Users\Steve\myModule\myModule.csproj:
Determining projects to restore...
Restored C:\Users\Steve\myModule\myModule.csproj (in 184 ms).
Restore succeeded.
Membangun modul
Gunakan perintah CLI .NET standar untuk membangun proyek.
dotnet build
PS C:\Users\Steve\myModule> dotnet build
MSBuild version 17.6.3+07e294721 for .NET
Determining projects to restore...
All projects are up-to-date for restore.
PowerShellPG -> C:\Users\Steve\myModule\bin\Debug\netstandard2.0\myModule.dll
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:00:02.36
Menguji modul
Setelah membangun modul, Anda dapat mengimpornya dan menjalankan cmdlet sampel.
Import-Module .\bin\Debug\netstandard2.0\myModule.dll
Test-SampleCmdlet -?
Test-SampleCmdlet -FavoriteNumber 7 -FavoritePet Cat
NAME
Test-SampleCmdlet
SYNTAX
Test-SampleCmdlet [-FavoriteNumber] <int> [[-FavoritePet] {Cat | Dog | Horse}] [<CommonParameters>]
ALIASES
None
REMARKS
None
FavoriteNumber FavoritePet
-------------- -----------
7 Cat
Melacak kesalahan pada modul
Untuk panduan tentang menyiapkan Visual Studio Code untuk debugging modul, lihat Menggunakan Visual Studio Code untuk debugging cmdlet yang dikompilasi.
Teknologi pendukung
Bagian berikut menjelaskan secara rinci beberapa teknologi yang digunakan oleh templat ini.
Pustaka Standar .NET
.NET Standard adalah spesifikasi formal dari API .NET yang tersedia di semua implementasi .NET. Kode terkelola yang menargetkan .NET Standard berfungsi dengan versi .NET Framework dan .NET Core yang kompatibel dengan versi .NET Standard tersebut.
Nota
Meskipun API mungkin ada di .NET Standard, implementasi API di .NET Core dapat melemparkan PlatformNotSupportedException
pada waktu proses, jadi untuk memverifikasi kompatibilitas dengan Windows PowerShell dan PowerShell Core, praktik terbaiknya adalah menjalankan pengujian untuk modul Anda di kedua lingkungan.
Jalankan juga pengujian di Linux dan macOS jika modul Anda dimaksudkan untuk menjadi lintas platform.
Menargetkan .NET Standard membantu memastikan bahwa, saat modul berkembang, API yang tidak kompatibel tidak secara tidak sengaja diperkenalkan ke dalam modul. Ketidaksesuaian ditemukan pada waktu kompilasi alih-alih runtime.
Namun, tidak diperlukan untuk menargetkan .NET Standard agar modul berfungsi dengan Windows PowerShell dan PowerShell Core, selama Anda menggunakan API yang kompatibel. Bahasa Perantara (IL) kompatibel antara dua runtime. Anda dapat menargetkan .NET Framework 4.6.1, yang kompatibel dengan .NET Standard 2.0. Jika Anda tidak menggunakan API di luar .NET Standard 2.0, maka modul Anda berfungsi dengan PowerShell Core 6 tanpa kompilasi ulang.
Pustaka Standar PowerShell
Pustaka PowerShell Standard adalah spesifikasi formal API PowerShell yang tersedia di semua versi PowerShell yang lebih besar dari atau sama dengan versi standar tersebut.
Misalnya, PowerShell Standard 5.1 kompatibel dengan Windows PowerShell 5.1 dan PowerShell Core 6.0 atau yang lebih baru.
Kami sarankan Anda mengkompilasi modul Anda menggunakan Pustaka Standar PowerShell. Pustaka memastikan API tersedia dan diimplementasikan di Windows PowerShell dan PowerShell Core 6. PowerShell Standard dimaksudkan untuk selalu kompatibel ke depan. Modul yang dibuat menggunakan PowerShell Standard Library 5.1 akan selalu kompatibel dengan versi PowerShell di masa mendatang.
Daftar Modul
Menunjukkan Kompatibilitas Dengan Windows PowerShell dan PowerShell Core
Setelah memvalidasi bahwa modul Anda berfungsi dengan Windows PowerShell dan PowerShell Core, manifes modul harus secara eksplisit menunjukkan kompatibilitas dengan menggunakan properti CompatiblePSEditions.
Nilai Desktop
berarti modul kompatibel dengan Windows PowerShell, sementara nilai Core
berarti modul kompatibel dengan PowerShell Core. Termasuk Desktop
dan Core
berarti bahwa modul kompatibel dengan Windows PowerShell dan PowerShell Core.
Nota
Core
tidak secara otomatis berarti bahwa modul kompatibel dengan Windows, Linux, dan macOS.
Properti CompatiblePSEditions diperkenalkan di PowerShell v5. Manifes modul yang menggunakan properti CompatiblePSEditions gagal dimuat pada versi sebelum PowerShell v5.
Menunjukkan Kompatibilitas OS
Pertama, validasi bahwa modul Anda berfungsi di Linux dan macOS. Selanjutnya, tunjukkan kompatibilitas dengan sistem operasi tersebut dalam manifes modul. Ini memudahkan pengguna untuk menemukan modul Anda untuk sistem operasi mereka saat diterbitkan ke PowerShell Gallery.
Dalam manifes modul, properti PrivateData
memiliki sub-properti PSData
. Properti Tags
opsional dari PSData
menerima array nilai yang muncul di Galeri PowerShell. Galeri PowerShell mendukung nilai kompatibilitas berikut ini:
Etiket | Deskripsi |
---|---|
PSEdition_Core | Kompatibel dengan PowerShell Core 6 |
PSEdition_Desktop | Kompatibel dengan Windows PowerShell |
Windows | Kompatibel dengan Windows |
Linux | Kompatibel dengan Linux (tidak ada distro tertentu) |
macOS | Kompatibel dengan macOS |
Contoh:
@{
GUID = "4ae9fd46-338a-459c-8186-07f910774cb8"
Author = "Microsoft Corporation"
CompanyName = "Microsoft Corporation"
Copyright = "(C) Microsoft Corporation. All rights reserved."
HelpInfoUri = "https://go.microsoft.com/fwlink/?linkid=855962"
ModuleVersion = "1.2.4"
PowerShellVersion = "3.0"
ClrVersion = "4.0"
RootModule = "PackageManagement.psm1"
Description = 'PackageManagement (a.k.a. OneGet) is a new way to discover and install software packages from around the web.
it's a manager or multiplexer of existing package managers (also called package providers) that unifies Windows package management with a single Windows PowerShell interface. With PackageManagement, you can do the following.
- Manage a list of software repositories in which packages can be searched, acquired and installed
- Discover software packages
- Seamlessly install, uninstall, and inventory packages from one or more software repositories'
CmdletsToExport = @(
'Find-Package',
'Get-Package',
'Get-PackageProvider',
'Get-PackageSource',
'Install-Package',
'Import-PackageProvider'
'Find-PackageProvider'
'Install-PackageProvider'
'Register-PackageSource',
'Set-PackageSource',
'Unregister-PackageSource',
'Uninstall-Package'
'Save-Package'
)
FormatsToProcess = @('PackageManagement.format.ps1xml')
PrivateData = @{
PSData = @{
Tags = @('PackageManagement', 'PSEdition_Core', 'PSEdition_Desktop', 'Windows', 'Linux', 'macOS')
ProjectUri = 'https://oneget.org'
}
}
}
Dependensi pada Pustaka Asli
Modul yang ditujukan untuk digunakan di berbagai sistem operasi atau arsitektur prosesor dapat bergantung pada pustaka terkelola yang bergantung pada beberapa pustaka asli.
Sebelum PowerShell 7, seseorang harus memiliki kode kustom untuk memuat dll asli yang sesuai sehingga pustaka terkelola dapat menemukannya dengan benar.
Dengan PowerShell 7, biner asli untuk di-load dicari di sub-folder dalam lokasi pustaka terkelola berdasarkan subset notasi katalog .NET RID.
managed.dll folder
|
|--- 'win-x64' folder
| |--- native.dll
|
|--- 'win-x86' folder
| |--- native.dll
|
|--- 'win-arm' folder
| |--- native.dll
|
|--- 'win-arm64' folder
| |--- native.dll
|
|--- 'linux-x64' folder
| |--- native.so
|
|--- 'linux-x86' folder
| |--- native.so
|
|--- 'linux-arm' folder
| |--- native.so
|
|--- 'linux-arm64' folder
| |--- native.so
|
|--- 'osx-x64' folder
| |--- native.dylib