Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Począwszy od wersji 5.1, program PowerShell jest dostępny w różnych wersjach, które oznaczają różne zestawy funkcji i zgodność platformy.
- Wersja na komputery stacjonarne: Zbudowany na .NET Framework, dotyczy Windows PowerShell w wersji 4.0 i starszych, a także Windows PowerShell 5.1 w systemach Windows Desktop, Windows Server, Windows Server Core i większości innych wersji systemu Windows.
- Edycja podstawowa: Oparty na platformie .NET Core, dotyczy programu PowerShell 6.0 i nowszych, a także Windows PowerShell 5.1 w wersjach systemu Windows o zmniejszonym zużyciu, takich jak Windows IoT i Windows Nano Server.
Aby uzyskać więcej informacji na temat wersji programu PowerShell, zobacz about_PowerShell_Editions.
Deklarowanie zgodnych wersji
Autorzy modułów mogą zadeklarować swoje moduły jako zgodne z co najmniej jedną edycją programu PowerShell przy użyciu klucza manifestu modułu CompatiblePSEditions . Ten klucz jest obsługiwany tylko w programie PowerShell 5.1 lub nowszym.
Uwaga / Notatka
Po określeniu manifestu modułu za pomocą klucza CompatiblePSEditions lub użyciu zmiennej $PSEdition nie można go zaimportować do programu PowerShell w wersji 4 lub niższej.
New-ModuleManifest -Path .\TestModuleWithEdition.psd1 -CompatiblePSEditions Desktop,Core -PowerShellVersion 5.1
$ModuleInfo = Test-ModuleManifest -Path .\TestModuleWithEdition.psd1
$ModuleInfo.CompatiblePSEditions
Desktop
Core
$ModuleInfo | Get-Member CompatiblePSEditions
TypeName: System.Management.Automation.PSModuleInfo
Name MemberType Definition
---- ---------- ----------
CompatiblePSEditions Property System.Collections.Generic.IEnumerable[string] CompatiblePSEditions {get;}
Podczas uzyskiwania listy dostępnych modułów możesz filtrować listę według wersji programu PowerShell.
Get-Module -ListAvailable -PSEdition Desktop
Directory: C:\Program Files\WindowsPowerShell\Modules
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Manifest 1.0 ModuleWithPSEditions
Get-Module -ListAvailable -PSEdition Core | % CompatiblePSEditions
Desktop
Core
Począwszy od programu PowerShell 6, wartość jest używana do decydowania, czy moduł jest zgodny, CompatiblePSEditions gdy moduły są importowane z $env:windir\System32\WindowsPowerShell\v1.0\Modulesprogramu .
To zachowanie dotyczy tylko systemu Windows. Poza tym scenariuszem wartość jest używana tylko jako metadane.
Znajdowanie kompatybilnych modułów
Użytkownicy Galeria programu PowerShell mogą znaleźć listę modułów obsługiwanych w określonej wersji programu PowerShell przy użyciu tagów PSEdition_Desktop i PSEdition_Core.
Moduły bez tagów PSEdition_Desktop i PSEdition_Core są uważane za działające prawidłowo w wersjach programu PowerShell Desktop.
# Find modules supported on PowerShell Desktop edition
Find-Module -Tag PSEdition_Desktop
# Find modules supported on PowerShell Core editions
Find-Module -Tag PSEdition_Core
Kierowanie na wiele wersji
Autorzy modułów mogą publikować pojedynczy moduł przeznaczony dla jednej lub obu wersji programu PowerShell (klasycznej i podstawowej).
Pojedynczy moduł może działać zarówno w wersji Desktop, jak i Core, w tym module autor musi dodać wymaganą logikę w RootModule lub w manifeście modułu using $PSEdition zmiennej. Moduły mogą mieć dwa zestawy skompilowanych bibliotek DLL przeznaczonych zarówno dla CoreCLR , jak i FullCLR. Poniżej przedstawiono opcje pakowania z logiką ładowania odpowiednich bibliotek DLL.
Opcja 1: Pakowanie modułu do określania wartości docelowej dla wielu wersji i wielu wersji programu PowerShell
Zawartość folderu modułu
- Microsoft.Windows.PowerShell.ScriptAnalyzer.BuiltinRules.dll
- Microsoft.Windows.PowerShell.ScriptAnalyzer.dll
- PSScriptAnalyzer.psd1
- PSScriptAnalyzer.psm1
- ScriptAnalyzer.format.ps1xml
- ScriptAnalyzer.types.ps1xml
- CoreCLR\Microsoft.Windows.PowerShell.ScriptAnalyzer.BuiltinRules.dll
- CoreCLR\Microsoft.Windows.PowerShell.ScriptAnalyzer.dll
- en-US\about_PSScriptAnalyzer.help.txt
- en-US\Microsoft.Windows.PowerShell.ScriptAnalyzer.dll-Help.xml
- PSv3\Microsoft.Windows.PowerShell.ScriptAnalyzer.BuiltinRules.dll
- PSv3\Microsoft.Windows.PowerShell.ScriptAnalyzer.dll
- Ustawienia\CmdletDesign.psd1
- Ustawienia\DSC.psd1
- Ustawienia\ScriptFunctions.psd1
- Ustawienia\ScriptingStyle.psd1
- Ustawienia\ScriptSecurity.psd1
Zawartość PSScriptAnalyzer.psd1 pliku
@{
# Author of this module
Author = 'Microsoft Corporation'
# Script module or binary module file associated with this manifest.
RootModule = 'PSScriptAnalyzer.psm1'
# Version number of this module.
ModuleVersion = '1.6.1'
# ---
}
Poniższa logika ładuje wymagane zestawy w zależności od bieżącej edycji lub wersji.
Zawartość PSScriptAnalyzer.psm1 pliku:
#
# Script module for module 'PSScriptAnalyzer'
#
Set-StrictMode -Version Latest
# Set up some helper variables to make it easier to work with the module
$PSModule = $ExecutionContext.SessionState.Module
$PSModuleRoot = $PSModule.ModuleBase
# Import the appropriate nested binary module based on the current PowerShell version
$binaryModuleRoot = $PSModuleRoot
if (($PSVersionTable.Keys -contains "PSEdition") -and ($PSVersionTable.PSEdition -ne 'Desktop')) {
$binaryModuleRoot = Join-Path -Path $PSModuleRoot -ChildPath 'coreclr'
}
else
{
if ($PSVersionTable.PSVersion -lt [Version]'5.0')
{
$binaryModuleRoot = Join-Path -Path $PSModuleRoot -ChildPath 'PSv3'
}
}
$binaryModulePath = Join-Path -Path $binaryModuleRoot -ChildPath 'Microsoft.Windows.PowerShell.ScriptAnalyzer.dll'
$binaryModule = Import-Module -Name $binaryModulePath -PassThru
# When the module is unloaded, remove the nested binary module that was loaded with it
$PSModule.OnRemove = {
Remove-Module -ModuleInfo $binaryModule
}
Opcja 2: Użyj zmiennej $PSEdition w pliku PSD1, aby załadować odpowiednie biblioteki DLL
W systemie PS 5.1 lub nowszym $PSEdition zmienna globalna jest dozwolona w pliku manifestu modułu. Korzystając z tej zmiennej, autor modułu może określić wartości warunkowe w pliku manifestu modułu.
$PSEdition można odwoływać się do zmiennej w trybie języka ograniczonego lub w sekcji Dane.
Przykładowy plik manifestu modułu z CompatiblePSEditions kluczem.
@{
# Script module or binary module file associated with this manifest.
RootModule = if($PSEdition -eq 'Core')
{
'coreclr\MyCoreClrRM.dll'
}
else # Desktop
{
'clr\MyFullClrRM.dll'
}
# Supported PSEditions
CompatiblePSEditions = 'Desktop', 'Core'
# Modules to import as nested modules of the module specified in RootModule/ModuleToProcess
NestedModules = if($PSEdition -eq 'Core')
{
'coreclr\MyCoreClrNM1.dll',
'coreclr\MyCoreClrNM2.dll'
}
else # Desktop
{
'clr\MyFullClrNM1.dll',
'clr\MyFullClrNM2.dll'
}
}
Zawartość modułu
- ModuleWithEditions\ModuleWithEditions.psd1
- ModuleWithEditions\clr\MyFullClrNM1.dll
- ModuleWithEditions\clr\MyFullClrNM2.dll
- ModuleWithEditions\clr\MyFullClrRM.dll
- ModuleWithEditions\coreclr\MyCoreClrNM1.dll
- ModuleWithEditions\coreclr\MyCoreClrNM2.dll
- ModuleWithEditions\coreclr\MyCoreClrRM.dll
Więcej szczegółów
PowerShell Gallery