UseCompatibleTypes
Schweregrad: Warnung
Beschreibung
Diese Regel identifiziert Typen, die in bestimmten PowerShell-Plattformen nicht verfügbar (standardmäßig geladen) sind.
Eine PowerShell-Plattform wird durch einen Namen im folgenden Format identifiziert:
<os-name>_<os-arch>_<os-version>_<ps-version>_<ps-arch>_<dotnet-version>_<dotnet-edition>
Wo:
-
<os-name>
: Der Name des Betriebssystems PowerShell wird ausgeführt. Unter Windows enthält dies die SKU-Nummer. Unter Linux ist dies der Name der Verteilung. -
<os-arch>
: Die Computerarchitektur, auf der das Betriebssystem ausgeführt wird (dies ist in der Regelx64
). -
<os-version>
: Die selbst gemeldete Version des Betriebssystems (unter Linux, dies ist die Verteilungsversion). -
<ps-version>
: Die PowerShell-Version (von$PSVersionTable.PSVersion
). -
<ps-arch>
: Die Computerarchitektur des PowerShell-Prozesses. -
<dotnet-version>
: Die gemeldete Version der .NET-Laufzeit-PowerShell wird ausgeführt (vonSystem.Environment.Version
). -
<dotnet-edition>
: Die .NET-Laufzeit-Aroma-PowerShell wird ausgeführt (derzeitframework
odercore
).
Zum Beispiel:
-
win-4_x64_10.0.18312.0_5.1.18312.1000_x64_4.0.30319.42000_framework
ist PowerShell 5.1 unter Windows 10 Enterprise (Build 18312) für x64. -
win-4_x64_10.0.18312.0_6.1.2_x64_4.0.30319.42000_core
ist PowerShell 6.1.2 auf demselben Betriebssystem ausgeführt. -
ubuntu_x64_18.04_6.2.0_x64_4.0.30319.42000_core
ist PowerShell 6.2.0 unter Ubuntu 18.04 ausgeführt.
Einige Plattformen werden mit PSScriptAnalyzer als JSON-Dateien gebündelt, die auf diese Weise für die Zielbestimmung in Ihrer Konfiguration benannt sind.
Standardmäßig gebündelte Plattformen sind:
PowerShell-Version | Betriebssystem | 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 |
Weitere Profile finden Sie im GitHub-Repository.
Sie können auch Ihr eigenes Plattformprofil mithilfe des PSCompatibilityCollector-Modulsgenerieren.
Die Kompatibilitätsprofileinstellungen enthalten eine Liste der Plattformen, die unter TargetProfiles
als Ziel verwendet werden sollen. Eine Plattform kann wie möglich angegeben werden:
- Ein Plattformname (z. B.
ubuntu_x64_18.04_6.1.1_x64_4.0.30319.42000_core
), der am Ende.json
hinzugefügt und im Standardprofilverzeichnis gesucht wird. - Ein Dateiname (wie
my_custom_platform.json
), der im Standardprofilverzeichnis nach dem gesucht wird. - Ein absoluter Pfad zu einer Datei (z. B.
D:\PowerShellProfiles\TargetMachine.json
).
Das Standardprofilverzeichnis befindet sich unter dem PSScriptAnalzyer-Modul bei $PSScriptRoot/PSCompatibilityCollector/profiles
(wobei $PSScriptRoot
hier auf das Verzeichnis verweist, das PSScriptAnalyzer.psd1
enthält).
Die Kompatibilitätsanalyse vergleicht einen Typ, der sowohl mit einem Zielprofil als auch mit einem "Union"-Profil verwendet wird (mit allen typen, die in einem beliebigen Profil im Profilverzeichnis verfügbar sind). Wenn ein Typ nicht im Union-Profil vorhanden ist, wird davon ausgegangen, dass er lokal erstellt und ignoriert wird. Andernfalls gilt, wenn ein Typ im Union-Profil vorhanden, aber nicht in einem Ziel vorhanden ist, als nicht mit diesem Ziel kompatibel ist.
Konfigurationseinstellungen
Konfigurationsschlüssel | Bedeutung | Akzeptierte Werte | Obligatorisch | Beispiel |
---|---|---|---|---|
Enable |
Aktiviert die Regel. | bool ($true /$false ) |
Nein (Standard: $false ) |
$true |
TargetProfiles |
Die Liste der powerShell-Profile, die als Ziel verwendet werden sollen | string[]: absolute Pfade zu Profildateien oder Namen von Profilen im Profilverzeichnis | Nein (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 |
Der Speicherort für die Suche nach Profilen nach Name und Verwendung für die Union-Profilgenerierung | string: absoluter Pfad zu neuem Profil dir | Nein (Standardeinstellung für compatibility_profiles Verzeichnis im PSScriptAnalyzer-Modul |
C:\Users\me\Documents\pssaCompatProfiles |
IgnoreTypes |
Vollständige Namen von Typen oder Typbeschleunigern, um die Kompatibilität von Skripts zu ignorieren | string[]: Namen der zu ignorierenden Typen | Nein (Standard: @() ) |
@('System.Collections.ArrayList','string') |
Eine Beispielkonfiguration könnte wie folgt aussehen:
@{
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'
)
}
}
}
Alternativ können Sie ein Einstellungsobjekt wie folgt bereitstellen:
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'
Unterdrückung
Die Befehlskompatibilitätsdiagnose kann mit einem Attribut im param
Block eines Scriptblocks wie bei anderen Regeln unterdrückt werden.
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleTypes', '')]
Die Regel kann auch nur für bestimmte Typen unterdrückt werden:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleTypes',
'System.Management.Automation.Security.SystemPolicy')]
Und auch nur für Typmitglieder unterdrückt:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands',
'System.Management.Automation.LanguagePrimitives/ConvertTypeNameToPSTypeName')]