Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Nivel de gravedad de : advertencia
Estado por defecto: Desactivado
Descripción
Esta regla detecta comandos que no están disponibles en tu plataforma PowerShell objetivo.
Los nombres de plataformas PowerShell utilizan el siguiente formato:
<os-name>_<os-arch>_<os-version>_<ps-version>_<ps-arch>_<dotnet-version>_<dotnet-edition>
Dónde:
-
<os-name>: el nombre del sistema operativo en el que se ejecuta PowerShell. En Windows, el número SKU está incluido. En Linux, el valor es el nombre de la distribución. -
<os-arch>: La arquitectura de la máquina en la que se ejecuta el sistema operativo (normalmentex64). -
<os-version>: La versión auto-reportada del sistema operativo (la versión de distribución en Linux). -
<ps-version>: la versión de PowerShell (de$PSVersionTable.PSVersion). -
<ps-arch>: la arquitectura de máquina del proceso de PowerShell. -
<dotnet-version>: la versión notificada de PowerShell en tiempo de ejecución de .NET se ejecuta (desdeSystem.Environment.Version). -
<dotnet-edition>: PowerShell del tipo de tiempo de ejecución de .NET se está ejecutando (actualmenteframeworkocore).
Por ejemplo:
-
win-4_x64_10.0.18312.0_5.1.18312.1000_x64_4.0.30319.42000_frameworkes PowerShell 5.1 que se ejecuta en Windows 10 Enterprise (compilación 18312) para x64. -
win-4_x64_10.0.18312.0_6.1.2_x64_4.0.30319.42000_corees PowerShell 6.1.2 que se ejecuta en el mismo sistema operativo. -
ubuntu_x64_18.04_6.2.0_x64_4.0.30319.42000_corees PowerShell 6.2.0 que se ejecuta en Ubuntu 18.04.
PSScriptAnalyzer incluye algunos perfiles de plataforma como archivos JSON. Puedes dirigir estos perfiles integrados directamente a tu configuración.
Las plataformas agrupadas de forma predeterminada son:
| Versión de PowerShell | Sistema operativo | IDENTIFICACIÓN |
|---|---|---|
| 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 | Windows 10.0.14393 | win-8_x64_10.0.14393.0_6.2.4_x64_4.0.30319.42000_core |
| 6.2 | Windows 10.0.17763 | win-8_x64_10.0.17763.0_6.2.4_x64_4.0.30319.42000_core |
| 6.2 | Windows 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 | Windows 10.0.14393 | win-8_x64_10.0.14393.0_7.0.0_x64_3.1.2_core |
| 7.0 | Windows 10.0.17763 | win-8_x64_10.0.17763.0_7.0.0_x64_3.1.2_core |
| 7.0 | Windows 10.0.18362 | win-4_x64_10.0.18362.0_7.0.0_x64_3.1.2_core |
Puede encontrar otros perfiles en el repositorio de GitHub de .
También puedes generar tu propio perfil de plataforma con el módulo PSCompatibilityCollector.
La configuración de compatibilidad incluye una lista de plataformas bajo TargetProfiles. Puedes especificar cada plataforma objetivo como:
- Un nombre de plataforma (por ejemplo,
ubuntu_x64_18.04_6.1.1_x64_4.0.30319.42000_core). PSScriptAnalyzer lo añade.jsony lo busca en el directorio de perfil por defecto. - Un nombre de archivo (por ejemplo,
my_custom_platform.json), que PSScriptAnalyzer busca en el directorio de perfil por defecto. - Ruta de acceso absoluta a un archivo (como
D:\PowerShellProfiles\TargetMachine.json).
El directorio de perfil por defecto está bajo el módulo PSScriptAnalyzer en $PSScriptRoot/compatibility_profiles (donde $PSScriptRoot aquí se refiere al directorio que contiene PSScriptAnalyzer.psd1).
El análisis de compatibilidad compara cada comando que usas tanto con un perfil objetivo como con un perfil de unión. El perfil de unión contiene todos los comandos disponibles en cualquier perfil del directorio de perfil.
Si un comando no está en el perfil de la unión, la regla asume que es local para tu entorno y lo ignora. Si un comando está en el perfil de unión pero falta en un perfil de objetivo, la regla lo marca como incompatible con ese objetivo.
Ejemplo
Los siguientes ejemplos asumen TargetProfiles incluyendo ubuntu_x64_18.04_6.2.4_x64_4.0.30319.42000_core (Ubuntu 18.04, PowerShell 6.2).
No conforme
function Get-OsInfo {
$os = Get-WmiObject -Class Win32_OperatingSystem
return $os.Caption
}
Compliant
function Get-OsInfo {
$os = Get-CimInstance -ClassName Win32_OperatingSystem
return $os.Caption
}
Configurar regla
@{
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'
)
}
}
}
Parameters
Enable
Este parámetro controla si ScriptAnalyzer comprueba el código con esta regla. Acepta un valor booleano. Para habilitar esta regla, establece este parámetro en $true. El valor por defecto es $false.
Perfiles de Objetivo
Este parámetro especifica la lista de perfiles de plataforma para comprobar la compatibilidad con ella. Acepta una matriz de cadenas. Cada valor puede ser un nombre de plataforma, un nombre de archivo o una ruta absoluta hacia un archivo de perfil. El valor por defecto es @().
PerfilDirPath
Este parámetro controla el directorio que ScriptAnalyzer busca perfiles por nombre y utiliza para generar el perfil de unión. Acepta una cadena que contiene un camino absoluto. La ubicación predeterminada es el compatibility_profiles directorio en el módulo PSScriptAnalyzer.
IgnorarComandas
Este parámetro especifica comandos que deben excluirse de las comprobaciones de compatibilidad. Acepta una matriz de cadenas de nombres de comando. El valor por defecto es @().
Supresión
Como con otras reglas, puedes suprimir diagnósticos de compatibilidad de comandos añadiendo un atributo de supresión al param bloque de un bloque de script.
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands', '')]
También puedes suprimir la regla para comandos específicos:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands',
'Start-Service')]
También puedes suprimirlo para parámetros específicos:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands',
'Import-Module/FullyQualifiedName')]