Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
A partir da versão 5.1, o PowerShell está disponível em diferentes edições, que denotam conjuntos de recursos variados e compatibilidade de plataforma.
- Edição Desktop: Criado com base no .NET Framework, aplica-se ao Windows PowerShell v4.0 e inferior, bem como ao Windows PowerShell 5.1 na Área de Trabalho do Windows, Windows Server, Windows Server Core e a maioria das outras edições do Windows.
- Edição Core: Baseado no .NET Core, aplica-se ao PowerShell 6.0 e superior, bem como ao Windows PowerShell 5.1 em edições reduzidas do Windows, como o Windows IoT e o Windows Nano Server.
Para obter mais informações sobre as edições do PowerShell, consulte about_PowerShell_Editions.
Declarar edições compatíveis
Os autores de módulos podem declarar que seus módulos são compatíveis com uma ou mais edições do PowerShell usando a chave de manifesto do CompatiblePSEditions módulo. Essa chave só é suportada no PowerShell 5.1 ou posterior.
Observação
Depois que um manifesto de módulo é especificado com a CompatiblePSEditions chave ou usa a variável, ele não pode ser importado $PSEdition no PowerShell v4 ou inferior.
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;}
Ao obter uma lista de módulos disponíveis, você pode filtrar a lista por edição do 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
A partir do PowerShell 6, o valor é usado para decidir se um módulo é compatível quando os CompatiblePSEditions módulos são importados do $env:windir\System32\WindowsPowerShell\v1.0\Modules.
Esse comportamento só se aplica ao Windows. Fora desse cenário, o valor é usado apenas como metadados.
Encontrar módulos compatíveis
Os usuários da Galeria do PowerShell podem encontrar a lista de módulos suportados em uma edição específica do PowerShell usando tags PSEdition_Desktop e PSEdition_Core.
Módulos sem PSEdition_Desktop e PSEdition_Core tags são considerados como funcionando bem nas edições do 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
Segmentação de várias edições
Os autores do módulo podem publicar uma única segmentação de módulo para uma ou ambas as edições do PowerShell (Desktop e Core).
Um único módulo pode funcionar nas edições Desktop e Core, nesse módulo o autor tem que adicionar a lógica necessária no RootModule ou no manifesto do módulo usando $PSEdition a variável. Os módulos podem ter dois conjuntos de DLLs compiladas direcionadas para CoreCLR e FullCLR. Aqui estão as opções de empacotamento com lógica para carregar DLLs adequadas.
Opção 1: empacotar um módulo para direcionar várias versões e várias edições do PowerShell
Conteúdo da pasta do módulo
- 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
- Configurações\CmdletDesign.psd1
- Configurações\DSC.psd1
- Configurações\ScriptFunctions.psd1
- Configurações\ScriptingStyle.psd1
- Configurações\ScriptSecurity.psd1
Conteúdo do PSScriptAnalyzer.psd1 ficheiro
@{
# 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'
# ---
}
A lógica abaixo carrega os assemblies necessários dependendo da edição ou versão atual.
Conteúdo do PSScriptAnalyzer.psm1 ficheiro:
#
# 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
}
Opção 2: Use $PSEdition variável no arquivo PSD1 para carregar as DLLs adequadas
No PS 5.1 ou mais recente, $PSEdition a variável global é permitida no arquivo de manifesto do módulo. Usando essa variável, o autor do módulo pode especificar os valores condicionais no arquivo de manifesto do módulo.
$PSEdition variável pode ser referenciada no modo de idioma restrito ou em uma seção Dados.
Exemplo de arquivo de manifesto do módulo com CompatiblePSEditions chave.
@{
# 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'
}
}
Conteúdo do módulo
- 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
Mais detalhes
PowerShell Gallery