Windows PowerShell için yazılmış .NET Framework için PowerShell Core yazılırken .NET Core.Windows PowerShell ve PowerShell Core çalışma modülleri taşınabilir modüllerdir. .NET Framework ve .NET Core son derece uyumlu olsa da, kullanılabilir API’lerden ikisi arasındaki farklılıklar vardır.Ayrıca API farklılıkları Windows PowerShell ve PowerShell Core kullanılabilen vardır. Modüller hem ortamlarında kullanılmak üzere bu farklılıkları farkında olmanız gerekir.

Varolan bir modülle taşıma

Bir PSSnapIn taşıma

PowerShell ek bileşen PowerShell Core desteklenmez. Ancak, bir PSSnapIn bir PowerShell modülüne Dönüştür Önemsiz değildir. Genellikle, bir sınıfın türetildiği tek kaynak dosyadaki PSSnapIn kayıt kodu PSSnapIn. Bu kaynak dosyası derlemeden kaldırın; artık gerekli değildir.

Kullanım yeni ModuleManifest PSSnapIn kayıt kodu gereksinimini yerini alan yeni bir modül bildirimi oluşturmak için. Değerlerden bazıları PSSnapIn (gibi açıklama) içinde modül bildirimi yeniden kullanılabilir.

RootModule cmdlet’leri uygulayan derleme (dll) adına modül bildirimindeki özelliği ayarlanmalıdır.

.NET Portability Analyzer (diğer adıyla APIPort)

Bağlantı noktası modüllerine başlayın PowerShell Core ile iş Windows PowerShell için yazılan .NET taşınabilirlik Çözümleyicisi. .NET modülde kullanılan API’ler, .NET Framework, .NET Core ve diğer .NET çalışma zamanları ile uyumlu olup olmadığını belirlemek için derlenmiş bütünleştirilmiş kodunuzda bu aracı çalıştırın. Varsa, araç diğer API’ler önerir. Aksi takdirde, eklemeniz gerekebilir çalışma zamanı denetimleri ve kısıtlama özellikleri özel çalışma zamanları içinde kullanılabilir değil.

Yeni modül oluşturuluyor

Yeni modül oluşturuluyorsa, zamanlayıcısının .NET CLI.

Standart PowerShell modülü şablonu yükleme

.NET CLI’yı yükledikten sonra basit bir PowerShell modülü oluşturmak için bir şablon Kitaplığı yükleyin. Modülü, Windows PowerShell, PowerShell Core, Windows, Linux ve macOS ile uyumlu olacaktır.

Aşağıdaki örnekte, şablon yükleneceği gösterilmektedir:PowerShellKopyala

dotnet new -i Microsoft.PowerShell.Standard.Module.Template

outputKopyala

  Restoring packages for C:\Users\Steve\.templateengine\dotnetcli\v2.1.302\scratch\restore.csproj...
  Installing Microsoft.PowerShell.Standard.Module.Template 0.1.3.
  Generating MSBuild file C:\Users\Steve\.templateengine\dotnetcli\v2.1.302\scratch\obj\restore.csproj.nuget.g.props.
  Generating MSBuild file C:\Users\Steve\.templateengine\dotnetcli\v2.1.302\scratch\obj\restore.csproj.nuget.g.targets.
  Restore completed in 1.66 sec for C:\Users\Steve\.templateengine\dotnetcli\v2.1.302\scratch\restore.csproj.

Usage: new [options]

Options:
  -h, --help          Displays help for this command.
  -l, --list          Lists templates containing the specified name. If no name is specified, lists all templates.
  -n, --name          The name for the output being created. If no name is specified, the name of the current directory is used.
  -o, --output        Location to place the generated output.
  -i, --install       Installs a source or a template pack.
  -u, --uninstall     Uninstalls a source or a template pack.
  --nuget-source      Specifies a NuGet source to use during install.
  --type              Filters templates based on available types. Predefined values are "project", "item" or "other".
  --force             Forces content to be generated even if it would change existing files.
  -lang, --language   Filters templates based on language and specifies the language of the template to create.


Templates                                         Short Name         Language          Tags
----------------------------------------------------------------------------------------------------------------------------
Console Application                               console            [C#], F#, VB      Common/Console
Class library                                     classlib           [C#], F#, VB      Common/Library
PowerShell Standard Module                        psmodule           [C#]              Library/PowerShell/Module
...

Yeni Modül projesi oluşturma

Şablon yüklendikten sonra bu şablonu kullanarak yeni bir PowerShell modülü projesi oluşturabilirsiniz. Bu örnekte, örnek modülü, ‘myModule’ adı verilir.Kopyala

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...
Running 'dotnet restore' on C:\Users\Steve\myModule\myModule.csproj...
  Restoring packages for C:\Users\Steve\myModule\myModule.csproj...
  Installing PowerShellStandard.Library 5.1.0.
  Generating MSBuild file C:\Users\Steve\myModule\obj\myModule.csproj.nuget.g.props.
  Generating MSBuild file C:\Users\Steve\myModule\obj\myModule.csproj.nuget.g.targets.
  Restore completed in 1.76 sec for C:\Users\Steve\myModule\myModule.csproj.

Restore succeeded.

Modülü oluşturma

Projeyi oluşturmak için standart .NET CLI komutlarını kullanın.PowerShellKopyala

dotnet build

outputKopyala

PS C:\Users\Steve\myModule> dotnet build
Microsoft (R) Build Engine version 15.7.179.6572 for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.

  Restore completed in 76.85 ms for C:\Users\Steve\myModule\myModule.csproj.
  myModule -> C:\Users\Steve\myModule\bin\Debug\netstandard2.0\myModule.dll

Build succeeded.
    0 Warning(s)
    0 Error(s)

Time Elapsed 00:00:05.40

Modül test etme

Modül oluşturduktan sonra içe aktarın ve örnek cmdlet’ini yürütün.PowerShellKopyala

ipmo .\bin\Debug\netstandard2.0\myModule.dll
Test-SampleCmdlet -?
Test-SampleCmdlet -FavoriteNumber 7 -FavoritePet Cat

outputKopyala

PS C:\Users\Steve\myModule> ipmo .\bin\Debug\netstandard2.0\myModule.dll
PS C:\Users\Steve\myModule> Test-SampleCmdlet -?

NAME
    Test-SampleCmdlet

SYNTAX
    Test-SampleCmdlet [-FavoriteNumber] <int> [[-FavoritePet] {Cat | Dog | Horse}] [<CommonParameters>]


ALIASES
    None


REMARKS
    None


PS C:\Users\Steve\myModule> Test-SampleCmdlet -FavoriteNumber 7 -FavoritePet Cat

FavoriteNumber FavoritePet
-------------- -----------
             7 Cat

Aşağıdaki bölümlerde bu şablon tarafından kullanılan teknolojilerden bazıları ayrıntılı olarak açıklanmaktadır.

.NET standard kitaplığı

.NET standard bir resmi belirtimi .NET API’leri, tüm .NET uygulamalarında kullanılabilir. Yönetilen kod hedefleyen .NET Standard’ın bu sürümü ile uyumlu olan .NET Framework ve .NET Core sürümleri ile .NET Standard çalışır.

 Not

Bir API .NET Standard sürümünde mevcut olmasına karşın, .NET Core API uygulamasında oluşturabilecek bir PlatformNotSupportedException çalışma zamanında, bu nedenle Windows PowerShell ve PowerShell Core ile uyumluluğunu doğrulamak için en iyi modülünüzde hem ortamlarında testleri çalıştırmak için uygulamadır. Ayrıca, modül platformlar arası olması amaçlanıyorsa testleri Linux ve macOS üzerinde çalıştırın.

.NET Standard hedefleme, modül geliştikçe uyumsuz API’leri yanlışlıkla modüle tanışın yoksa, garanti eder. Uyumsuzluk çalışma zamanı yerine derleme zamanında bulunur.

Bununla birlikte, uyumlu API’leri kullandığınız sürece hedeflenecek .NET Windows PowerShell ve PowerShell Core ile çalışmak için standart bir modül için gerekli değildir. Ara dil (IL) iki çalışma zamanları arasında uyumludur. .NET Framework 4.6.1, .NET Standard 2.0 ile uyumlu olduğu hedefleyebilirsiniz. .NET Standard 2.0 dışında API’leri kullanmıyorsanız, modülünüzün yeniden derleme PowerShell Core 6 ile çalışır.

PowerShell standart kitaplığı

PowerShell standart kitaplıktır PowerShell API’lerini tüm sürümlerde kullanılabilir PowerShell, standart sürümüne eşit veya daha büyük bir resmi belirtimi.

Örneğin, PowerShell standart 5.1 uyumlu Windows PowerShell 5.1 hem PowerShell Core 6.0 veya daha yeni.

PowerShell standart kitaplığı kullanarak modülünüzde derleme öneririz. Kitaplık kullanılabilir ve uygulanan hem Windows PowerShell hem de PowerShell Core 6 API’ler sağlar. PowerShell standart her zaman ileten uyumlu olacak şekilde tasarlanmıştır. Standart kitaplık 5.1 PowerShell kullanılarak oluşturulan bir modül, her zaman gelecekteki PowerShell sürümleriyle uyumlu olur.

Modül bildirimi

Windows PowerShell ve PowerShell Core belirten uyumluluk

Modülünüzün Windows PowerShell ve PowerShell Core ile çalıştığını doğruladıktan sonra modül bildirimini açıkça uyumluluk kullanarak belirtmelidir CompatiblePSEditions özelliği. Değerini Desktopmodülü değerini sırasında Windows PowerShell ile uyumlu olduğu anlamına gelir Core modülü PowerShell Core ile uyumlu olduğu anlamına gelir. Her ikisi de dahil olmak üzere Desktop ve Coremodülü Windows PowerShell ve PowerShell Core ile uyumlu olduğu anlamına gelir.

 Not

Core otomatik olarak modül Windows, Linux ve macOS ile uyumlu olduğunu gelmez.CompatiblePSEditions özelliği PowerShell V5’e çıkarılmıştır. Modül bildirimleri kullanan CompatiblePSEditions özelliği başarısız PowerShell v5’dan önceki sürümlerde yüklenemedi.

İşletim sistemi uyumluluğu belirten

İlk olarak, modülünüzün Linux ve macOS üzerinde çalıştığını doğrulayın. Ardından, bu işletim sistemlerine modül bildirimindeki uyumluluğunu gösterir. Bu sayede, işletim sistemi için yayımlandığında modülünüzde bulmak kullanıcılar için daha kolay PowerShell Galerisi.

Modül bildirimini içinde PrivateData özelliğine sahip bir PSData alt özellik. İsteğe bağlı Tags özelliği PSData PowerShell galerisinde görünen değerlerin dizisini alır. PowerShell Galerisi aşağıdaki uyumluluk değerlerini destekler:

EtiketAçıklama
PSEdition_CorePowerShell Core 6 ile uyumlu
PSEdition_DesktopWindows PowerShell ile uyumlu
WindowsWindows ile uyumlu
LinuxLinux (belirli distro yok) ile uyumlu
Mac OSMacOS ile uyumlu

Örnek:PowerShellKopyala

@{
    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 is 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'
        }
    }
}

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.

Scroll Up