Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Krátký popis
Různé edice PowerShellu běží na různých podkladových modulech runtime.
Dlouhý popis
Z PowerShellu 5.1 existuje několik editions PowerShellu, které se spouští v jiném modulu runtime .NET. Od PowerShellu 6.0 existují dvě edice PowerShellu:
- Desktop, který běží na .NET Frameworku. PowerShell 4 a novější a PowerShell 5.1 jsou k dispozici pro plnohodnotné edice Windows, jako jsou Windows Desktop, Windows Server, Windows Server Core a většina ostatních operačních systémů Windows. Toto je původní edice PowerShellu a je součástí výchozí instalace operačního systému.
- Core, která běží na .NET Core. PowerShell 6.0 a novější se instaluje souběžně s dřívějšími verzemi PowerShellu v plnohodnotných edicích Windows, některých edicích s nižšími nároky na Windows, jako jsou Windows Nano Server a Windows IoT nebo na jiných než Windows platformách, jako je Linux a macOS.
Vzhledem k tomu, že edice PowerShellu odpovídá modulu runtime .NET, je primárním indikátorem kompatibility .NET rozhraní API a modulu PowerShellu. Některá rozhraní API .NET, typy nebo metody nejsou k dispozici v .NET modulu runtime a to má vliv na skripty a moduly PowerShellu, které na nich závisejí.
Automatická $PSEdition proměnná
V PowerShellu 5.1 a novějších můžete zjistit, jakou edici používáte s $PSEdition automatickou proměnnou:
$PSEdition
Core
V PowerShellu 4 a níže tato proměnná neexistuje.
$PSEdition mít hodnotu null by měla být považována za stejnou jako s hodnotou Desktop.
Edice v $PSVersionTable
Automatická proměnná $PSVersionTable má také vlastnost PSEdition v PowerShellu 5.1 a vyšší:
$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
Pole PSEdition má stejnou hodnotu jako $PSEdition automatická proměnná.
Pole manifestu CompatiblePSEditions modulu
Moduly PowerShellu můžou deklarovat, s jakou edicí PowerShellu jsou kompatibilní pomocí pole CompatiblePSEditions manifestu modulu.
Například manifest modulu deklarující kompatibilitu s edicemi PowerShellu Desktop i Core:
@{
ModuleVersion = '1.0'
FunctionsToExport = @('Test-MyModule')
CompatiblePSEditions = @('Desktop', 'Core')
}
Příklad manifestu modulu s pouze kompatibilitou Desktop:
@{
ModuleVersion = '1.0'
FunctionsToExport = @('Test-MyModule')
CompatiblePSEditions = @('Desktop')
}
Vynechání pole CompatiblePSEditions z manifestu modulu bude mít stejný účinek jako nastavení na Desktop, protože moduly vytvořené před zavedením tohoto pole byly implicitně napsány pro tuto edici.
Pro moduly, které nejsou dodávány jako součást Windows (tj. moduly, které píšete nebo instalujete z galerie), je toto pole pouze informativní; PowerShell nemění chování na základě pole CompatiblePSEditions, ale zveřejňuje ho na objektu PSModuleInfo (vrácený Get-Module) pro vlastní logiku:
$newModuleManifestSplat = @{
Path = '.\TestModuleWithEdition.psd1'
CompatiblePSEditions = 'Desktop', 'Core'
PowerShellVersion = '5.1'
}
New-ModuleManifest @newModuleManifestSplat
$ModuleInfo = Test-ModuleManifest -Path .\TestModuleWithEdition.psd1
$ModuleInfo.CompatiblePSEditions
Desktop
Core
Poznámka
Pole modulu CompatiblePSEditions je kompatibilní pouze s PowerShellem 5.1 a novějším. Zahrnutím tohoto pole bude modul nekompatibilní s PowerShellem 4 a níže. Vzhledem k tomu, že je pole čistě informativní, můžete ho bezpečně vynechat v pozdějších verzích PowerShellu.
V PowerShellu 6.1 měl Get-Module -ListAvailable aktualizovaný formátovací modul, aby zobrazil kompatibilitu edice jednotlivých 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...
Kompatibilita edice pro moduly, které se dodávají jako součást Windows
Pro moduly, které jsou součástí Windows (nebo jsou nainstalovány jako součást role nebo funkce), PowerShell 6.1 a vyšší zachází s polem CompatiblePSEditions odlišně. Tyto moduly najdete v adresáři Windows systémových modulů PowerShellu (%windir%\System\WindowsPowerShell\v1.0\Modules).
V případě modulů načtených z tohoto adresáře nebo nalezených v tomto adresáři používá PowerShell 6.1 a vyšší pole CompatiblePSEditions k určení, jestli bude modul kompatibilní s aktuální relací a chová se odpovídajícím způsobem.
Při použití Import-Module se modul bez Core v CompatiblePSEditions nenaimportuje a zobrazí se chyba:
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
Při použití Get-Module -ListAvailable se moduly bez Core v CompatiblePSEditions nezobrazí:
Get-Module -ListAvailable BitsTransfer
# No output
V obou případech -SkipEditionCheck[switch] lze parametr použít k přepsání tohoto chování:
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,...
Varování
Import-Module -SkipEditionCheck může být pro modul úspěšný, ale použití tohoto modulu vede k riziku, že později dojde k nekompatibilitě; při počátečním načtení modulu bude úspěšný, příkaz může později volat nekompatibilní rozhraní API a spontánně selhat.
Vytváření modulů PowerShellu pro křížovou kompatibilitu edice
Při psaní modulu PowerShellu, který cílí na Desktop i Core edice PowerShellu, můžete udělat něco, co můžete udělat, abyste zajistili kompatibilitu mezi edicemi.
Jediný pravdivý způsob, jak potvrdit a průběžně ověřit kompatibilitu, je ale psát testy pro váš skript nebo modul a spouštět je ve všech verzích a edicích PowerShellu, se kterými potřebujete kompatibilitu. Doporučená testovací architektura pro toto je Pester.
Skript PowerShellu
PowerShell funguje stejně jako jazyk mezi edicemi; jedná se o rutiny, moduly a .NET rozhraní API, která používáte, které mají vliv na kompatibilitu edice.
Obecně platí, že skripty, které fungují v PowerShellu 6.1 a novějším, budou fungovat s Windows PowerShellem 5.1, ale existují některé výjimky.
PSScriptAnalyzer verze 1.18 nebo novější má pravidla, jako jsou PSUseCompatibleCommands a PSUseCompatibleTypes, které můžou detekovat nekompatibilní použití příkazů a rozhraní API .NET ve skriptech PowerShellu.
sestavení .NET
Pokud píšete binární modul nebo modul, který obsahuje .NET sestavení (DLL) generované ze zdrojového kódu, měli byste zkompilovat .NET Standard a PowerShell Standard pro ověření kompatibility .NET a kompatibility rozhraní PowerShell API.
I když tyto knihovny dokážou zkontrolovat určitou kompatibilitu v době kompilace, nebudou moct zachytit možné rozdíly v chování mezi edicemi. V takovém případě musíte stále psát testy.
Viz také
- about_Automatic_Variables
- Get-Module
- importu modulu
- moduly s kompatibilními edicemi PowerShellu