UseCompatibleCommands
Nível de gravidade: aviso
DESCRIÇÃO
Essa regra identifica comandos que não estão disponíveis em uma plataforma do PowerShell de destino.
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 operacional no qual o PowerShell está sendo executado. No Windows, isso inclui o número de SKU. No Linux, esse é o nome da distribuição.<os-arch>
: a arquitetura do computador em que o sistema operacional está em execução (geralmentex64
é ).<os-version>
: a versão autorre reportada do sistema operacional (no Linux, essa é 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 relatada do PowerShell do runtime do .NET está em execução (a partir deSystem.Environment.Version
).<dotnet-edition>
: o tipo de runtime do .NET no qual o PowerShell está sendo executado (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 (build 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 operacional.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 vêm agrupadas com PSScriptAnalyzer como arquivos JSON, nomeados dessa forma para direcionamento em sua configuração.
As plataformas agrupadas por padrão são:
Versão do PowerShell | Sistema operacional | 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 |
Outros perfis podem ser encontrados no repositório GitHub.
Você também pode gerar seu próprio perfil de plataforma usando o módulo PSCompatibilityCollector.
As configurações de perfil de compatibilidade usam uma lista de plataformas para serem direcionadas 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 é pesquisado no diretório de perfil padrão. - Um nome de arquivo (como
my_custom_platform.json
), que será pesquisado no diretório de perfil padrão. - Um caminho absoluto para um arquivo (como
D:\PowerShellProfiles\TargetMachine.json
).
O diretório de perfil padrão está no módulo PSScriptAnalzyer em $PSScriptRoot/compatibility_profiles
(onde $PSScriptRoot
aqui se refere ao diretório que PSScriptAnalyzer.psd1
contém ).
A análise de compatibilidade compara um comando usado com um perfil de destino e um perfil 'union' (contendo todos os comandos disponíveis em qualquer perfil no dir do perfil). Se um comando não estiver presente no perfil de união, será considerado criado e ignorado localmente. Caso contrário, se um comando estiver presente no perfil de união, mas não estiver presente em um destino, ele será considerado incompatível com esse destino.
Definições de configuração
Chave de configuração | Significado | Valores aceitos | Obrigatório | Exemplo |
---|---|---|---|---|
Enable |
Ativa a regra | bool ($true /$false ) |
Não (padrão: $false ) |
$true |
TargetProfiles |
A lista de perfis do PowerShell a serem direcionados | string[]: caminhos absolutos para arquivos de perfil ou nomes de perfis no diretório de perfil | Não (padrã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 |
O local para pesquisar perfis por nome e usar para geração de perfil de união | cadeia de caracteres: caminho absoluto para o novo dir de perfil | Não (padrão para compatibility_profiles o diretório no módulo PSScriptAnalyzer |
C:\Users\me\Documents\pssaCompatProfiles |
IgnoreCommands |
Comandos para ignorar a compatibilidade de em scripts | string[]: nomes de comandos a serem ignorados | Não (padrão: @() ) |
@('Get-ChildItem','Import-Module') |
Uma configuração de exemplo pode ser semelhante a:
@{
Rules = @{
PSUseCompatibleCommands = @{
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 commands to not check like this, which also will ignore its parameters:
IgnoreCommands = @(
'Install-Module'
)
}
}
}
Supressão
As diagnóstico de compatibilidade de comando podem ser suprimidas com um atributo no param
bloco de um scriptblock como acontece com outras regras.
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands', '')]
A regra também pode ser suprimida somente para comandos específicos:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands', 'Start-Service')]
E também suprimido somente para parâmetros:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands', 'Import-Module/FullyQualifiedName')]
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de