UseCompatibleCommands
Schweregrad: Warnung
Beschreibung
Diese Regel identifiziert Befehle, die auf einer bestimmten PowerShell-Plattform nicht verfügbar 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/compatibility_profiles
(wobei $PSScriptRoot
hier auf das Verzeichnis verweist, das PSScriptAnalyzer.psd1
enthält).
Die Kompatibilitätsanalyse vergleicht einen Befehl, der sowohl mit einem Zielprofil als auch mit einem "Union"-Profil verwendet wird (mit allen befehlen, die in einem beliebigen Profil im Profilverzeichnis verfügbar sind). Wenn kein Befehl im Union-Profil vorhanden ist, wird davon ausgegangen, dass er lokal erstellt und ignoriert wird. Andernfalls gilt ein Befehl, wenn ein Befehl 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 |
IgnoreCommands |
Befehle zum Ignorieren der Kompatibilität von Skripts | string[]: Namen der zu ignorierenden Befehle | Nein (Standard: @() ) |
@('Get-ChildItem','Import-Module') |
Eine Beispielkonfiguration könnte wie folgt aussehen:
@{
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'
)
}
}
}
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('PSUseCompatibleCommands', '')]
Die Regel kann auch nur für bestimmte Befehle unterdrückt werden:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands',
'Start-Service')]
Und auch nur für Parameter unterdrückt:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands',
'Import-Module/FullyQualifiedName')]