UseCompatibleTypes
Schweregrad: Warnung
BESCHREIBUNG
Diese Regel identifiziert Typen, die nicht verfügbar (standardmäßig geladen) in Bestimmten PowerShell-Plattformen 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>
Hierbei gilt:
-
<os-name>
: Der Name des Betriebssystems, unter dem PowerShell ausgeführt wird. Unter Windows schließt dies die SKU-Nummer ein. Unter Linux ist dies der Name der Distribution. -
<os-arch>
: Die Computerarchitektur, auf der das Betriebssystem ausgeführt wird (normalerweisex64
). -
<os-version>
: Die selbst gemeldete Version des Betriebssystems (unter Linux ist dies die Verteilungsversion). -
<ps-version>
: Die PowerShell-Version (von$PSVersionTable.PSVersion
). -
<ps-arch>
: Die Computerarchitektur des PowerShell-Prozesses. -
<dotnet-version>
: Die gemeldete Version der .NET-Runtime, die PowerShell unter (vonSystem.Environment.Version
) ausgeführt wird. -
<dotnet-edition>
: Der .NET-Laufzeitgeschmack, in dem PowerShell ausgeführt wird (derzeitframework
odercore
).
Beispiel:
-
win-4_x64_10.0.18312.0_5.1.18312.1000_x64_4.0.30319.42000_framework
wird PowerShell 5.1 auf Windows 10 Enterprise (Build 18312) für x64 ausgeführt. -
win-4_x64_10.0.18312.0_6.1.2_x64_4.0.30319.42000_core
ist PowerShell 6.1.2, die unter demselben Betriebssystem ausgeführt wird. -
ubuntu_x64_18.04_6.2.0_x64_4.0.30319.42000_core
ist PowerShell 6.2.0, die unter Ubuntu 18.04 ausgeführt wird.
Einige Plattformen werden mit PSScriptAnalyzer als JSON-Dateien gebündelt, die auf diese Weise für die Ausrichtung in Ihrer Konfiguration benannt werden.
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 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 |
Weitere Profile finden Sie im GitHub-Repository.
Sie können auch ihr eigenes Plattformprofil mit dem Modul PSCompatibilityCollector generieren.
Die Kompatibilitätsprofileinstellungen verwenden eine Liste der Plattformen, die unter als Ziel festgelegt werden TargetProfiles
sollen. Eine Plattform kann wie folgt angegeben werden:
- Ein Plattformname (z. B.
ubuntu_x64_18.04_6.1.1_x64_4.0.30319.42000_core
), der am Ende hinzugefügt wurde.json
und im Standardprofilverzeichnis gesucht wird. - Ein Dateiname (wie
my_custom_platform.json
), der im Standardprofilverzeichnis nach gesucht wird. - Ein absoluter Pfad zu einer Datei (z. B
D:\PowerShellProfiles\TargetMachine.json
. ).
Das Standardprofilverzeichnis befindet sich unter dem PSScriptAnalzyer-Modul unter $PSScriptRoot/PSCompatibilityCollector/profiles
(wobei $PSScriptRoot
sich hier auf das Verzeichnis bezieht, das enthält PSScriptAnalyzer.psd1
.
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 im Union-Profil nicht vorhanden ist, wird davon ausgegangen, dass er lokal erstellt und ignoriert wird. Andernfalls gilt ein Typ, wenn er im Union-Profil vorhanden ist, aber nicht in einem Ziel vorhanden ist, als mit diesem Ziel nicht kompatibel.
Konfigurationseinstellungen
Konfigurationsschlüssel | Bedeutung | Zulässige 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 Generierung von Gewerkschaftsprofilen | string: absoluter Pfad zum neuen Profilverzeichnis | Nein (standardmäßig verzeichnis compatibility_profiles im PSScriptAnalyzer-Modul |
C:\Users\me\Documents\pssaCompatProfiles |
IgnoreTypes |
Vollständige Namen von Typen oder Typbeschleunigungen, um die Kompatibilität von in 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ät Diagnose kann mit einem Attribut für den param
Block eines Skriptblocks 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 Typmember unterdrückt:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands', 'System.Management.Automation.LanguagePrimitives/ConvertTypeNameToPSTypeName')]