Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
allvarlighetsgrad: Varning
Beskrivning
Denna regel upptäcker typer som inte är tillgängliga som standard på dina riktade PowerShell-plattformar.
Ett namn i PowerShell-plattformen identifieras i följande format:
<os-name>_<os-arch>_<os-version>_<ps-version>_<ps-arch>_<dotnet-version>_<dotnet-edition>
Var:
-
<os-name>: Namnet på operativsystemet PowerShell körs på. På Windows ingår SKU-numret. På Linux är värdet namnet på distributionen. -
<os-arch>: Maskinarkitekturen som operativsystemet körs på (vanligtvisx64). -
<os-version>: Den självrapporterade versionen av operativsystemet (distributionsversionen på Linux). -
<ps-version>: PowerShell-versionen (från$PSVersionTable.PSVersion). -
<ps-arch>: Datorarkitekturen för 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ärvarandeframeworkellercore).
Till exempel:
-
win-4_x64_10.0.18312.0_5.1.18312.1000_x64_4.0.30319.42000_frameworkkö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_corekörs PowerShell 6.1.2 på samma operativsystem. -
ubuntu_x64_18.04_6.2.0_x64_4.0.30319.42000_corekörs PowerShell 6.2.0 på Ubuntu 18.04.
PSScriptAnalyzer inkluderar vissa plattformsprofiler som JSON-filer. Du kan rikta in dig på dessa inbyggda profiler direkt 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 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 |
Andra profiler finns på GitHub-lagringsplatsen.
Du kan också skapa din egen plattformsprofil med PSCompatibilityCollector-modulen.
Kompatibilitetsinställningar tar en lista över plattformar under TargetProfiles. Du kan ange varje målplattform som:
- Ett plattformsnamn (till exempel
ubuntu_x64_18.04_6.1.1_x64_4.0.30319.42000_core). PSScriptAnalyzer lägger till.jsonoch söker efter den i standardprofilkatalogen. - Ett filnamn (till exempel
my_custom_platform.json), som PSScriptAnalyzer söker efter i standardprofilkatalogen. - En absolut sökväg till en fil (som
D:\PowerShellProfiles\TargetMachine.json).
Standardprofilkatalogen finns under PSScriptAnalyzer-modulen på $PSScriptRoot/PSCompatibilityCollector/profiles (där $PSScriptRoot här avser katalogen som innehåller PSScriptAnalyzer.psd1).
Kompatibilitetsanalysen jämför varje typ du använder med både en målprofil och en unionprofil. Fackföreningsprofilen innehåller alla typer som finns tillgängliga i vilken profil som helst i profilkatalogen.
Om en typ inte finns i unionprofilen antar regeln att den är lokal för din miljö och ignorerar den. Om en typ finns i unionsprofilen men saknas i en målprofil, markerar regeln den som inkompatibel med det målet.
Exempel
Följande exempel antar TargetProfiles inkluderar win-48_x64_10.0.17763.0_5.1.17763.316_x64_4.0.30319.42000_framework (Windows 10 Pro, PowerShell 5.1).
Ej överensstämmande
System.Management.Automation.SemanticVersion är inte tillgängligt som standard i Windows PowerShell 5.1, så regeln flaggar denna typ av användning för den målprofilen.
$version = [System.Management.Automation.SemanticVersion]'1.2.3'
Godkänd
System.Version finns i Windows PowerShell 5.1 och PowerShell 7, så den klarar kompatibilitetskontroller över dessa mål.
$version = [System.Version]'1.2.3.0'
Konfigurera regel
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'
Undertryckande
Precis som med andra regler kan du undertrycka typkompatibilitetsdiagnostik genom att lägga till ett suppressionsattribut till blocket param i ett skriptblock.
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleTypes', '')]
Du kan också undertrycka regeln för specifika typer:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleTypes',
'System.Management.Automation.Security.SystemPolicy')]
Du kan också undertrycka den för specifika typer av medlemmar:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleTypes',
'System.Management.Automation.LanguagePrimitives/ConvertTypeNameToPSTypeName')]
Parameters
Enable
Denna parameter styr om ScriptAnalyzer kontrollerar koden mot denna regel. Den accepterar ett boolesk värde. För att aktivera denna regel, sätt denna parameter till $true. Standardvärdet är $false.
TargetProfiles
Denna parameter specificerar listan över plattformsprofiler som ska kontrolleras mot kompatibilitet. Den accepterar en matris med strängar. Varje värde kan vara ett plattformsnamn, ett filnamn eller en absolut väg till en profilfil. Standardvärdet är @().
ProfileDirPath
Denna parameter styr katalogen som ScriptAnalyzer söker efter profiler efter namn och använder för att generera unionprofilen. Den accepterar en sträng som innehåller en absolut väg. Standardplatsen är compatibility_profiles katalogen i PSScriptAnalyzer-modulen.
IgnoreTypes
Denna parameter specificerar fullständiga namn på typ- eller typacceleratorer för att utesluta från kompatibilitetskontroller. Den accepterar en array av typnamnssträngar. Standardvärdet är @().