UseCompatibleTypes
Nível de Gravidade: Aviso
Description
Esta regra identifica tipos que não estão disponíveis (carregados por predefinição) em plataformas do PowerShell direcionadas.
Uma plataforma do PowerShell é identificada por um nome no seguinte formato:
<os-name>_<os-arch>_<os-version>_<ps-version>_<ps-arch>_<dotnet-version>_<dotnet-edition>
Em que:
<os-name>
: O nome do sistema operativo no qual o PowerShell está em execução. No Windows, isto inclui o número de SKU. No Linux, este é o nome da distribuição.<os-arch>
: a arquitetura da máquina em que o sistema operativo está a ser executado (normalmentex64
, é ).<os-version>
: a versão auto-comunicada do sistema operativo (no Linux, esta é a versão de distribuição).<ps-version>
: a versão do PowerShell (de$PSVersionTable.PSVersion
).<ps-arch>
: a arquitetura do computador do processo do PowerShell.<dotnet-version>
: A versão comunicada do PowerShell de runtime do .NET está em execução (a partir deSystem.Environment.Version
).<dotnet-edition>
: O sabor de runtime .NET do PowerShell está em execução no (atualmenteframework
oucore
).
Por exemplo:
win-4_x64_10.0.18312.0_5.1.18312.1000_x64_4.0.30319.42000_framework
é o PowerShell 5.1 em execução no Windows 10 Enterprise (compilação 18312) para x64.win-4_x64_10.0.18312.0_6.1.2_x64_4.0.30319.42000_core
é o PowerShell 6.1.2 em execução no mesmo sistema operativo.ubuntu_x64_18.04_6.2.0_x64_4.0.30319.42000_core
é o PowerShell 6.2.0 em execução no Ubuntu 18.04.
Algumas plataformas são agrupadas com o PSScriptAnalyzer como ficheiros JSON, nomeados desta forma para segmentação na sua configuração.
As plataformas agrupadas por predefinição são:
Versão do PowerShell | Sistema Operativo | ID |
---|---|---|
3.0 | Windows Server 2012 | win-8_x64_6.2.9200.0_3.0_x64_4.0.30319.42000_framework |
4.0 | Windows Server 2012R2 | win-8_x64_6.3.9600.0_4.0_x64_4.0.30319.42000_framework |
5.1 | Windows Server 2016 | win-8_x64_10.0.14393.0_5.1.14393.2791_x64_4.0.30319.42000_framework |
5.1 | Windows Server 2019 | win-8_x64_10.0.17763.0_5.1.17763.316_x64_4.0.30319.42000_framework |
5.1 | Windows 10 1809 (RS5) | win-48_x64_10.0.17763.0_5.1.17763.316_x64_4.0.30319.42000_framework |
6.2 | Windows Server 2016 | win-8_x64_10.0.14393.0_6.2.4_x64_4.0.30319.42000_core |
6.2 | Windows Server 2019 | win-8_x64_10.0.17763.0_6.2.4_x64_4.0.30319.42000_core |
6.2 | Windows 10 1809 (RS5) | win-4_x64_10.0.17763.0_6.2.4_x64_4.0.30319.42000_core |
6.2 | Ubuntu 18.04 LTS | ubuntu_x64_18.04_6.2.4_x64_4.0.30319.42000_core |
7.0 | Windows Server 2016 | win-8_x64_10.0.14393.0_7.0.0_x64_3.1.2_core |
7.0 | Windows Server 2019 | win-8_x64_10.0.17763.0_7.0.0_x64_3.1.2_core |
7.0 | Windows 10 1809 (RS5) | win-4_x64_10.0.17763.0_6.2.4_x64_3.1.2_core |
7.0 | Ubuntu 18.04 LTS | ubuntu_x64_18.04_7.0.0_x64_3.1.2_core |
Podem ser encontrados outros perfis no repositório do GitHub.
Também pode gerar o seu próprio perfil de plataforma com o módulo PSCompatibilityCollector.
As definições do perfil de compatibilidade levam uma lista de plataformas a visar em TargetProfiles
. Uma plataforma pode ser especificada como:
- Um nome de plataforma (como
ubuntu_x64_18.04_6.1.1_x64_4.0.30319.42000_core
), que terá.json
adicionado ao final e é procurado no diretório de perfil predefinido. - Um nome de ficheiro (como
my_custom_platform.json
), que será procurado no diretório de perfil predefinido. - Um caminho absoluto para um ficheiro (como
D:\PowerShellProfiles\TargetMachine.json
).
O diretório de perfil predefinido está no módulo PSScriptAnalzyer em $PSScriptRoot/PSCompatibilityCollector/profiles
(onde $PSScriptRoot
aqui se refere ao diretório que PSScriptAnalyzer.psd1
contém ).
A análise de compatibilidade compara um tipo utilizado com um perfil de destino e um perfil "união" (que contém todos os tipos disponíveis em qualquer perfil no dir do perfil). Se um tipo não estiver presente no perfil de união, assume-se que foi criado localmente e ignorado. Caso contrário, se um tipo estiver presente no perfil sindical, mas não estiver presente num destino, será considerado incompatível com esse destino.
Definições de configuração
Chave de configuração | Significado | Valores aceites | Obrigatório | Exemplo |
---|---|---|---|---|
Enable |
Ativa a regra | bool ($true /$false ) |
Não (predefinição: $false ) |
$true |
TargetProfiles |
A lista de perfis do PowerShell para destino | string[]: caminhos absolutos para ficheiros de perfil ou nomes de perfis no diretório de perfil | Não (predefinição: @() ) |
@('ubuntu_x64_18.04_6.1.3_x64_4.0.30319.42000_core', 'win-48_x64_10.0.17763.0_5.1.17763.316_x64_4.0.30319.42000_framework') |
ProfileDirPath |
A localização para procurar perfis por nome e utilização para a geração de perfis sindicais | cadeia: caminho absoluto para o novo dir de perfil | Não (predefinições para o compatibility_profiles diretório no módulo PSScriptAnalyzer |
C:\Users\me\Documents\pssaCompatProfiles |
IgnoreTypes |
Nomes completos de tipos ou aceleradores de tipos para ignorar a compatibilidade de em scripts | string[]: nomes de tipos a ignorar | Não (predefinição: @() ) |
@('System.Collections.ArrayList','string') |
Uma configuração de exemplo pode ter o seguinte aspeto:
@{
Rules = @{
PSUseCompatibleTypes = @{
Enable = $true
TargetProfiles = @(
'ubuntu_x64_18.04_6.1.3_x64_4.0.30319.42000_core'
'win-48_x64_10.0.17763.0_5.1.17763.316_x64_4.0.30319.42000_framework'
'MyProfile'
'another_custom_profile_in_the_profiles_directory.json'
'D:\My Profiles\profile1.json'
)
# You can specify types to not check like this, which will also ignore methods and members on it:
IgnoreTypes = @(
'System.IO.Compression.ZipFile'
)
}
}
}
Em alternativa, pode fornecer um objeto de definições da seguinte forma:
PS> $settings = @{
Rules = @{
PSUseCompatibleTypes = @{
Enable = $true
TargetProfiles = @('win-48_x64_10.0.17763.0_5.1.17763.316_x64_4.0.30319.42000_framework')
}
}
}
PS> Invoke-ScriptAnalyzer -Settings $settings -ScriptDefinition '[System.Management.Automation.SemanticVersion]'1.18.0-rc1''
RuleName Severity ScriptName Line Message
-------- -------- ---------- ---- -------
PSUseCompatibleTypes Warning 1 The type 'System.Management.Automation.SemanticVersion' is
not available by default in PowerShell version
'5.1.17763.316' on platform 'Microsoft Windows 10 Pro'
Supressão
Os diagnósticos de compatibilidade de comandos podem ser suprimidos com um atributo no param
bloco de um scriptblock como com outras regras.
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleTypes', '')]
A regra também pode ser suprimida apenas para tipos específicos:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleTypes', 'System.Management.Automation.Security.SystemPolicy')]
E também suprimido apenas para membros do tipo:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands', 'System.Management.Automation.LanguagePrimitives/ConvertTypeNameToPSTypeName')]
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários