UseCompatibleCommands
Уровень серьезности: предупреждение
Описание
Это правило определяет команды, недоступные на целевой платформе PowerShell.
Платформа PowerShell идентифицируется именем в следующем формате:
<os-name>_<os-arch>_<os-version>_<ps-version>_<ps-arch>_<dotnet-version>_<dotnet-edition>
Где:
<os-name>
: имя операционной системы, в котором выполняется PowerShell. В Windows сюда входит номер SKU. В Linux это имя дистрибутива.<os-arch>
: архитектура компьютера, на котором работает операционная система (обычноx64
это ).<os-version>
: версия операционной системы с самостоятельным сообщением (в Linux это версия дистрибутива).<ps-version>
: версия PowerShell (из$PSVersionTable.PSVersion
).<ps-arch>
: архитектура компьютера процесса PowerShell.<dotnet-version>
: указанная версия среды выполнения .NET PowerShell выполняется в (изSystem.Environment.Version
).<dotnet-edition>
: powerShell версии среды выполнения .NET выполняется в (в настоящееframework
время илиcore
).
Пример:
win-4_x64_10.0.18312.0_5.1.18312.1000_x64_4.0.30319.42000_framework
— это PowerShell 5.1, запущенная на Windows 10 Корпоративная (сборка 18312) для 64-разрядных приложений.win-4_x64_10.0.18312.0_6.1.2_x64_4.0.30319.42000_core
PowerShell 6.1.2 работает в той же операционной системе.ubuntu_x64_18.04_6.2.0_x64_4.0.30319.42000_core
— это PowerShell 6.2.0, запущенная в Ubuntu 18.04.
Некоторые платформы поставляются в комплекте с PSScriptAnalyzer в виде JSON-файлов, которые называются таким образом для нацеливания в конфигурации.
Платформы, объединенные по умолчанию:
Версия PowerShell | Операционная система | 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 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 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 |
Другие профили можно найти в репозитории GitHub.
Вы также можете создать собственный профиль платформы с помощью модуля PSCompatibilityCollector.
Параметры профиля совместимости принимают список платформ для целевой платформы в .TargetProfiles
Платформу можно указать следующим образом:
- Имя платформы (например
ubuntu_x64_18.04_6.1.1_x64_4.0.30319.42000_core
, ), которое будет.json
добавлено в конец и выполняется поиск в каталоге профиля по умолчанию. - Имя файла (например
my_custom_platform.json
, ), в котором будет выполняться поиск в каталоге профиля по умолчанию. - Абсолютный путь к файлу (например
D:\PowerShellProfiles\TargetMachine.json
, ).
Каталог профиля по умолчанию находится в модуле PSScriptAnalzyer по адресу $PSScriptRoot/compatibility_profiles
(здесь $PSScriptRoot
ссылается на каталог, содержащий PSScriptAnalyzer.psd1
).
Анализ совместимости сравнивает команду, используемую как с целевым профилем, так и с профилем union (содержит все команды, доступные в любом профиле в каталоге профиля). Если команда отсутствует в профиле объединения, предполагается, что она создается локально и игнорируется. В противном случае, если команда присутствует в профиле объединения, но отсутствует в целевом объекте, она считается несовместимой с этим целевым объектом.
Параметры конфигурации
Ключ конфигурации | Значение | Допустимые значения | Обязательный | Пример |
---|---|---|---|---|
Enable |
Активирует правило. | bool ($true /$false ) |
Нет (по умолчанию: $false ) |
$true |
TargetProfiles |
Список целевых профилей PowerShell | string[]: абсолютные пути к файлам профилей или имена профилей в каталоге профилей | Нет (по умолчанию: @() ) |
@('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 |
Расположение для поиска профилей по имени и использования для создания профилей объединения | string: абсолютный путь к новому каталогу профиля | Нет (по умолчанию используется compatibility_profiles каталог в модуле PSScriptAnalyzer. |
C:\Users\me\Documents\pssaCompatProfiles |
IgnoreCommands |
Команды, которые игнорируют совместимость в скриптах | string[]: имена команд, которые следует игнорировать. | Нет (по умолчанию: @() ) |
@('Get-ChildItem','Import-Module') |
Пример конфигурации может выглядеть следующим образом:
@{
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'
)
}
}
}
Подавление
Диагностика совместимости команд можно подавлять с помощью атрибута в блоке param
scriptblock, как и в других правилах.
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands', '')]
Правило также можно подавлять только для определенных команд:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands', 'Start-Service')]
А также подавляется только для параметров:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands', 'Import-Module/FullyQualifiedName')]
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по