UseCompatibleTypes
Úroveň závažnosti: Upozornění
Popis
Toto pravidlo identifikuje typy, které nejsou dostupné (ve výchozím nastavení načtené) na cílových platformách PowerShellu.
Platforma PowerShellu je označená názvem v následujícím formátu:
<os-name>_<os-arch>_<os-version>_<ps-version>_<ps-arch>_<dotnet-version>_<dotnet-edition>
Kde:
<os-name>
: Název operačního systému, na kterém běží PowerShell. Ve Windows to zahrnuje číslo skladové položky. V Linuxu se jedná o název distribuce.<os-arch>
: Architektura počítače, na které běží operační systém (obvyklex64
se jedná o ).<os-version>
: Vlastní verze operačního systému (v Linuxu je to verze distribuce).<ps-version>
: Verze PowerShellu (od$PSVersionTable.PSVersion
).<ps-arch>
: Architektura počítače procesu PowerShellu.<dotnet-version>
: Nahlášená verze modulu runtime .NET PowerShellu je spuštěná na (odSystem.Environment.Version
).<dotnet-edition>
: Prostředí PowerShell s modulem runtime .NET běží (v současné doběframework
nebocore
).
Příklad:
win-4_x64_10.0.18312.0_5.1.18312.1000_x64_4.0.30319.42000_framework
je PowerShell 5.1 spuštěný na Windows 10 Enterprise (build 18312) pro x64.win-4_x64_10.0.18312.0_6.1.2_x64_4.0.30319.42000_core
je PowerShell 6.1.2 spuštěný ve stejném operačním systému.ubuntu_x64_18.04_6.2.0_x64_4.0.30319.42000_core
je PowerShell 6.2.0 běžící na Ubuntu 18.04.
Některé platformy jsou součástí souboru PSScriptAnalyzer jako soubory JSON, které jsou tímto způsobem pojmenovány pro cílení ve vaší konfiguraci.
Platformy ve výchozím nastavení jsou:
Verze PowerShellu | Operační systém | 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_6.2.4_x64_3.1.2_core |
Další profily najdete v úložišti GitHub.
Pomocí modulu PSCompatibilityCollector můžete také vygenerovat vlastní profil platformy.
Nastavení profilu kompatibility obsahuje seznam platforem, na které se mají cílit v části TargetProfiles
. Platformu je možné zadat takto:
- Název platformy (například
ubuntu_x64_18.04_6.1.1_x64_4.0.30319.42000_core
), který se.json
přidá na konec a vyhledá se ve výchozím adresáři profilu. - Název souboru (například
my_custom_platform.json
), který se vyhledá ve výchozím adresáři profilu. - Absolutní cesta k souboru (například
D:\PowerShellProfiles\TargetMachine.json
).
Výchozí adresář profilu je v modulu PSScriptAnalzyer na adrese $PSScriptRoot/PSCompatibilityCollector/profiles
(kde $PSScriptRoot
zde odkazuje na adresář obsahující PSScriptAnalyzer.psd1
).
Analýza kompatibility porovnává typ použitý jak s cílovým profilem, tak sjednocovacím profilem (obsahujícím všechny typy dostupné v libovolném profilu v adresáři profilu). Pokud se typ ve sjednocovacím profilu nenachází, předpokládá se, že je místně vytvořen a ignorován. V opačném případě, pokud je typ přítomen ve sjednocovacím profilu, ale není přítomen v cíli, je považován za nekompatibilní s tímto cílem.
Nastavení konfigurace
Konfigurační klíč | Význam | Přípustné hodnoty | Povinné | Příklad |
---|---|---|---|---|
Enable |
Aktivuje pravidlo. | bool ($true /$false ) |
Ne (výchozí: $false ) |
$true |
TargetProfiles |
Seznam profilů PowerShellu, na které chcete cílit | string[]: absolutní cesty k souborům profilů nebo názvům profilů v adresáři profilu | Ne (výchozí: @() ) |
@('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 |
Umístění pro vyhledání profilů podle názvu a použití pro generování sjednocovacího profilu | string: absolutní cesta k adresáři nového profilu | Ne (výchozí hodnota je compatibility_profiles adresář v modulu PSScriptAnalyzer. |
C:\Users\me\Documents\pssaCompatProfiles |
IgnoreTypes |
Úplné názvy typů nebo akcelerátorů typů, které mají ignorovat kompatibilitu ve skriptech | string[]: názvy typů, které se mají ignorovat | Ne (výchozí: @() ) |
@('System.Collections.ArrayList','string') |
Příklad konfigurace může vypadat takto:
@{
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'
)
}
}
}
Případně můžete zadat objekt nastavení následujícím způsobem:
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'
Potlačení
Diagnostiku kompatibility příkazů lze potlačit atributem v param
bloku scriptblock jako u jiných pravidel.
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleTypes', '')]
Pravidlo lze také potlačit pouze pro konkrétní typy:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleTypes', 'System.Management.Automation.Security.SystemPolicy')]
A také potlačeno pouze pro členy typu:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands', 'System.Management.Automation.LanguagePrimitives/ConvertTypeNameToPSTypeName')]
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro