UseCompatibleTypes
Allvarlighetsgrad: Varning
Description
Den här regeln identifierar typer som inte är tillgängliga (inlästa som standard) i målbaserade PowerShell-plattformar.
En PowerShell-plattform identifieras med ett namn i följande format:
<os-name>_<os-arch>_<os-version>_<ps-version>_<ps-arch>_<dotnet-version>_<dotnet-edition>
Plats:
<os-name>
: Namnet på operativsystemet Som PowerShell körs på. I Windows innehåller detta SKU-numret. I Linux är det här namnet på distributionen.<os-arch>
: Datorarkitekturen som operativsystemet körs på (detta är vanligtvisx64
).<os-version>
: Den självrapporterade versionen av operativsystemet (i Linux är detta distributionsversionen).<ps-version>
: PowerShell-versionen (från$PSVersionTable.PSVersion
).<ps-arch>
: Datorarkitekturen i PowerShell-processen.<dotnet-version>
: Den rapporterade versionen av .NET Runtime PowerShell körs på (frånSystem.Environment.Version
).<dotnet-edition>
: .NET-körningssmaken PowerShell körs på (för närvarandeframework
ellercore
).
Ett exempel:
win-4_x64_10.0.18312.0_5.1.18312.1000_x64_4.0.30319.42000_framework
körs PowerShell 5.1 på Windows 10 Enterprise (version 18312) för x64.win-4_x64_10.0.18312.0_6.1.2_x64_4.0.30319.42000_core
körs PowerShell 6.1.2 på samma operativsystem.ubuntu_x64_18.04_6.2.0_x64_4.0.30319.42000_core
är PowerShell 6.2.0 som körs på Ubuntu 18.04.
Vissa plattformar levereras med PSScriptAnalyzer som JSON-filer, namngivna på det här sättet för målinriktning i din konfiguration.
Plattformar som paketeras som standard är:
PowerShell-version | Operativsystem | 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_7.0.0_x64_3.1.2_core |
Andra profiler finns på GitHub-lagringsplatsen.
Du kan också generera en egen plattformsprofil med hjälp av modulen PSCompatibilityCollector.
Kompatibilitetsprofilinställningarna tar en lista över plattformar som ska riktas under TargetProfiles
. En plattform kan anges som:
- Ett plattformsnamn (till exempel
ubuntu_x64_18.04_6.1.1_x64_4.0.30319.42000_core
), som har.json
lagts till i slutet och söks efter i standardprofilkatalogen. - Ett filnamn (till exempel
my_custom_platform.json
), som söks efter i standardprofilkatalogen. - En absolut sökväg till en fil (som
D:\PowerShellProfiles\TargetMachine.json
).
Standardprofilkatalogen finns under PSScriptAnalzyer-modulen på $PSScriptRoot/PSCompatibilityCollector/profiles
(där $PSScriptRoot
här refererar till katalogen som innehåller PSScriptAnalyzer.psd1
).
Kompatibilitetsanalysen jämför en typ som används för både en målprofil och en "union"-profil (som innehåller alla typer som är tillgängliga i alla profiler i profildir). Om en typ inte finns i unionsprofilen antas den vara lokalt skapad och ignorerad. Om en typ finns i unionsprofilen men inte finns i ett mål anses den annars vara inkompatibel med det målet.
Konfigurationsinställningar
Konfigurationsnyckel | Innebörd | Godkända värden | Obligatorisk | Exempel |
---|---|---|---|---|
Enable |
Aktiverar regeln | bool ($true /$false ) |
Nej (standard: $false ) |
$true |
TargetProfiles |
Listan över PowerShell-profiler som ska riktas | string[]: absoluta sökvägar till profilfiler eller namn på profiler i profilkatalogen | Nej (standard: @() ) |
@('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 |
Platsen där profiler ska sökas efter namn och användas för generering av unionsprofiler | sträng: absolut sökväg till ny profildir | Nej (standard är compatibility_profiles katalogen i PSScriptAnalyzer-modulen |
C:\Users\me\Documents\pssaCompatProfiles |
IgnoreTypes |
Fullständiga namn på typer eller typacceleratorer för att ignorera kompatibilitet för i skript | string[]: namn på typer som ska ignoreras | Nej (standard: @() ) |
@('System.Collections.ArrayList','string') |
En exempelkonfiguration kan se ut så här:
@{
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'
)
}
}
}
Du kan också ange ett inställningsobjekt på följande sätt:
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'
Undertryckning
Kommandokompatibilitetsdiagnostik kan ignoreras med ett attribut i param
blocket för ett skriptblock som med andra regler.
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleTypes', '')]
Regeln kan också ignoreras endast för vissa typer:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleTypes', 'System.Management.Automation.Security.SystemPolicy')]
Och utelämnas endast för typmedlemmar:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands', 'System.Management.Automation.LanguagePrimitives/ConvertTypeNameToPSTypeName')]
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för