Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
úroveň závažnosti : Upozornění
Výchozí stav: Zakázáno
Popis
Toto pravidlo detekuje příkazy, které nejsou dostupné na vaší cílové platformě PowerShell.
PowerShell názvy platforem používají následující formát:
<os-name>_<os-arch>_<os-version>_<ps-version>_<ps-arch>_<dotnet-version>_<dotnet-edition>
Kde:
-
<os-name>: Název prostředí PowerShell operačního systému je spuštěný. Na Windows je číslo SKU. Na Linuxu je hodnota název distribuce. -
<os-arch>: Architektura stroje, na které operační systém běží (obvyklex64). -
<os-version>: Verze operačního systému, která se sama hlásila (distribuční verze na Linuxu). -
<ps-version>: Verze PowerShellu (z$PSVersionTable.PSVersion). -
<ps-arch>: Architektura počítače procesu PowerShellu. -
<dotnet-version>: Hlášená verze PowerShellu modulu runtime .NET je spuštěná (zSystem.Environment.Version). -
<dotnet-edition>: Modul runtime .NET je spuštěný v PowerShellu (aktuálněframeworknebocore).
Například:
-
win-4_x64_10.0.18312.0_5.1.18312.1000_x64_4.0.30319.42000_frameworkje PowerShell 5.1 spuštěný ve Windows 10 Enterprise (build 18312) pro platformu x64. -
win-4_x64_10.0.18312.0_6.1.2_x64_4.0.30319.42000_coreje 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_coreje PowerShell 6.2.0 běžící na Ubuntu 18.04.
PSScriptAnalyzer zahrnuje některé profily platforem jako JSON soubory. Tyto vestavěné profily můžete cílit přímo ve své konfiguraci.
Platformy, které jsou ve výchozím nastavení součástí, 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 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 |
Další profily najdete v úložišti GitHubu.
Můžete si také vytvořit vlastní profil platformy pomocí modulu PSCompatibilityCollector.
Nastavení kompatibility uvádí seznam platforem pod .TargetProfiles Každou cílovou platformu můžete specifikovat jako:
- Název platformy (například
ubuntu_x64_18.04_6.1.1_x64_4.0.30319.42000_core). PSScriptAnalyzer ji přidává.jsona vyhledává ve výchozím adresáři profilů. - Název souboru (například ),
my_custom_platform.jsonkterý PSScriptAnalyzer vyhledává ve výchozím adresáři profilu. - Absolutní cesta k souboru (například
D:\PowerShellProfiles\TargetMachine.json).
Výchozí adresář profilu je pod modulem PSScriptAnalyzer na ( $PSScriptRoot/compatibility_profiles kde $PSScriptRoot zde odkazuje na adresář obsahující PSScriptAnalyzer.psd1).
Analýza kompatibility porovnává každý příkaz, který použijete, jak s cílovým profilem, tak s profilem sjednocení. Union profil obsahuje všechny příkazy dostupné v jakémkoli profilu v adresáři profilů.
Pokud příkaz není v profilu sjednocení, pravidlo předpokládá, že je lokální ve vašem prostředí a ignoruje ho. Pokud je příkaz v union profilu, ale chybí v profilu cíle, pravidlo jej označí jako nekompatibilní s tímto cílem.
Příklad
Následující příklady zahrnují TargetProfiles ( ubuntu_x64_18.04_6.2.4_x64_4.0.30319.42000_core Ubuntu 18.04, PowerShell 6.2).
Nesplňující
function Get-OsInfo {
$os = Get-WmiObject -Class Win32_OperatingSystem
return $os.Caption
}
Kompatibilní
function Get-OsInfo {
$os = Get-CimInstance -ClassName Win32_OperatingSystem
return $os.Caption
}
Konfigurovat pravidlo
@{
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
Tento parametr ovládá, zda ScriptAnalyzer kontroluje kód podle tohoto pravidla. Přijímá booleovskou hodnotu. Pro povolení tohoto pravidla nastavte tento parametr na .$true Výchozí hodnota je $false.
TargetProfiles
Tento parametr specifikuje seznam profilů platforem, proti kterým je třeba ověřit kompatibilitu. Přijímá pole řetězců. Každá hodnota může být název platformy, název souboru nebo absolutní cesta k souboru profilu. Výchozí hodnota je @().
ProfileDirPath
Tento parametr řídí adresář, který ScriptAnalyzer vyhledává profily podle názvu a používá k generování union profilu. Přijímá řetězec obsahující absolutní cestu. Výchozí umístění je compatibility_profiles adresář v modulu PSScriptAnalyzer.
IgnoreCommands
Tento parametr specifikuje příkazy, které je třeba vyloučit z kontrol kompatibility. Přijímá pole řetězců příkazových jmen. Výchozí hodnota je @().
Potlačení
Stejně jako u jiných pravidel můžete diagnostiku kompatibility příkazů potlačit přidáním atributu potlačení do bloku param skriptbloku.
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands', '')]
Pravidlo můžete také potlačit pro konkrétní příkazy:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands',
'Start-Service')]
Můžete ho také potlačit pro specifické parametry:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands',
'Import-Module/FullyQualifiedName')]