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.
Nível de gravidade: Aviso
Descrição
Esta regra identifica comandos que não estão disponíveis em uma plataforma PowerShell de destino.
Uma plataforma 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 em que o PowerShell está sendo executado. No Windows, isso inclui o número SKU. No Linux, este é o nome da distribuição. -
<os-arch>: A arquitetura da máquina em que o sistema operacional está sendo executado (geralmente éx64). -
<os-version>: A versão auto-relatada do sistema operacional (no Linux, esta é a versão de distribuição). -
<ps-version>: A versão do PowerShell (do$PSVersionTable.PSVersion). -
<ps-arch>: A arquitetura de máquina do processo do PowerShell. -
<dotnet-version>: A versão relatada do PowerShell de tempo de execução do .NET está sendo executada em (a partir deSystem.Environment.Version). -
<dotnet-edition>: O tipo de tempo de execução do .NET PowerShell está sendo executado em (atualmenteframeworkoucore).
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 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 junto com o 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 Operativo | Identificação |
|---|---|---|
| 3.0 | Windows Server 2012 | win-8_x64_6.2.9200.0_3.0_x64_4.0.30319.42000_framework |
| 4.0 | Windows Server 2012 R2 | 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 Pro | win-48_x64_10.0.17763.0_5.1.17763.316_x64_4.0.30319.42000_framework |
| 6.2 | Ubuntu 18.04 LTS | ubuntu_x64_18.04_6.2.4_x64_4.0.30319.42000_core |
| 6.2 | Janelas 10.0.14393 | win-8_x64_10.0.14393.0_6.2.4_x64_4.0.30319.42000_core |
| 6.2 | Janelas 10.0.17763 | win-8_x64_10.0.17763.0_6.2.4_x64_4.0.30319.42000_core |
| 6.2 | Janelas 10.0.18362 | win-4_x64_10.0.18362.0_6.2.4_x64_4.0.30319.42000_core |
| 7.0 | Ubuntu 18.04 LTS | ubuntu_x64_18.04_7.0.0_x64_3.1.2_core |
| 7.0 | Janelas 10.0.14393 | win-8_x64_10.0.14393.0_7.0.0_x64_3.1.2_core |
| 7.0 | Janelas 10.0.17763 | win-8_x64_10.0.17763.0_7.0.0_x64_3.1.2_core |
| 7.0 | Janelas 10.0.18362 | win-4_x64_10.0.18362.0_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 levam uma lista de plataformas para segmentar 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á.jsonadicionado ao final e é pesquisado no diretório de perfil padrão. - Um nome de arquivo (como
my_custom_platform.json), que será pesquisado para o 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á sob o módulo PSScriptAnalzyer em $PSScriptRoot/compatibility_profiles (onde $PSScriptRoot aqui se refere ao diretório que contém PSScriptAnalyzer.psd1).
A análise de compatibilidade compara um comando usado com um perfil de destino e um perfil 'união' (contendo todos os comandos disponíveis em qualquer perfil no perfil dir). Se um comando não estiver presente no perfil da união, presume-se que ele seja criado localmente e ignorado. Caso contrário, se um comando estiver presente no perfil da 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 aceites | 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 perfis | 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 a geração de perfis de união | string: caminho absoluto para novo perfil dir | Não (padrão para compatibility_profiles diretório no módulo PSScriptAnalyzer |
C:\Users\me\Documents\pssaCompatProfiles |
IgnoreCommands |
Comandos para ignorar a compatibilidade de scripts in | string[]: nomes de comandos a serem ignorados | Não (padrão: @()) |
@('Get-ChildItem','Import-Module') |
Um exemplo de configuração pode ser parecido com:
@{
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
O diagnóstico de compatibilidade de comandos pode ser suprimido com um atributo no bloco param de um scriptblock como acontece com outras regras.
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands', '')]
A regra também pode ser suprimida apenas para comandos específicos:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands',
'Start-Service')]
E também suprimido apenas para parâmetros:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands',
'Import-Module/FullyQualifiedName')]