Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
уровень серьезности : предупреждение
Состояние по умолчанию: отключено
Описание
Это правило обнаруживает типы, которые по умолчанию недоступны на ваших целевых платформах 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>: среда выполнения .NET работает в PowerShell (в настоящее время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) для x64. -
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 | Операционная система | ИДЕНТИФИКАТОР |
|---|---|---|
| 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 Профессиональная | 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 |
Другие профили можно найти в репозитории GitHub.
Вы также можете создать собственный профиль платформы с помощью модуля PSCompatibilityCollector.
Настройки совместимости принимают список платформ под TargetProfiles. Вы можете указать каждую целевой платформу как:
- Название платформы (например,
ubuntu_x64_18.04_6.1.1_x64_4.0.30319.42000_core). PSScriptAnalyzer добавляет.jsonи ищет его в каталоге профилей по умолчанию. - Имя файла (например,
my_custom_platform.json), которое PSScriptAnalyzer ищет в каталоге профилей по умолчанию. - Абсолютный путь к файлу (например,
D:\PowerShellProfiles\TargetMachine.json).
Каталог профиля по умолчанию находится в модуле PSScriptAnalyzer по адресу $PSScriptRoot/PSCompatibilityCollector/profiles (где $PSScriptRoot здесь указано на каталог, содержащий PSScriptAnalyzer.psd1).
Анализ совместимости сравнивает каждый используемый тип как с целевым, так и с профсоюзным профилем. Профиль профсоюза содержит все типы, доступные в любом профиле в каталоге профилей.
Если тип не входит в профиль профсоюза, правило предполагает, что он локальный для вашей среды, и игнорирует его. Если тип находится в профе союза, но отсутствует в целевом профиле, правило отмечает его как несовместимый с этой целью.
Пример
Следующие примеры предполагают, что TargetProfiles включает win-48_x64_10.0.17763.0_5.1.17763.316_x64_4.0.30319.42000_framework (Windows 10 Pro, PowerShell 5.1).
Несоответствующий
System.Management.Automation.SemanticVersion по умолчанию недоступен в Windows PowerShell 5.1, поэтому правило отмечает использование этого типа для данного целевого профиля.
$version = [System.Management.Automation.SemanticVersion]'1.2.3'
Compliant
System.Version доступен в Windows PowerShell 5.1 и PowerShell 7, поэтому он проходит проверки совместимости между этими целями.
$version = [System.Version]'1.2.3.0'
Правило настройки
Пример конфигурации может выглядеть следующим образом:
@{
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'
)
}
}
}
Кроме того, можно указать объект settings следующим образом:
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'
Parameters
Enable
Этот параметр контролирует, проверяет ли ScriptAnalyzer код по этому правилу. Он принимает булево значение. Чтобы включить это правило, установите этот параметр на $true. Значение по умолчанию — $false.
TargetProfiles
Этот параметр определяет список профилей платформ для проверки совместимости. Здесь принимается массив строк. Каждое значение может быть названием платформы, именем файла или абсолютным путём к файлу профиля. Значение по умолчанию — @().
ProfileDirPath
Этот параметр управляет каталогом, который ScriptAnalyzer ищет профили по имени и использует для создания объединённого профиля. Он принимает строку, содержащую абсолютный путь. По умолчанию compatibility_profiles находится каталог в модуле PSScriptAnalyzer.
IgnoreTypes
Этот параметр определяет полные имена типов или ускорителей типов, которые исключаются из проверок совместимости. Он принимает массив строк с именами типов. Значение по умолчанию — @().
Подавление
Как и с другими правилами, диагностику совместимости типов можно подавить, добавив атрибут подавления в param блок скриптблока.
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleTypes', '')]
Вы также можете подавить это правило для определённых типов:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleTypes',
'System.Management.Automation.Security.SystemPolicy')]
Вы также можете подавить её для определённых типов:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleTypes',
'System.Management.Automation.LanguagePrimitives/ConvertTypeNameToPSTypeName')]