UseCompatibleCommands
ernstniveau: waarschuwing
Beschrijving
Met deze regel worden opdrachten geïdentificeerd die niet beschikbaar zijn op een gericht PowerShell-platform.
Een PowerShell-platform wordt geïdentificeerd door een naam in de volgende indeling:
<os-name>_<os-arch>_<os-version>_<ps-version>_<ps-arch>_<dotnet-version>_<dotnet-edition>
Waar:
-
<os-name>
: de naam van het besturingssysteem waarop PowerShell wordt uitgevoerd. In Windows bevat dit het SKU-nummer. In Linux is dit de naam van de distributie. -
<os-arch>
: de computerarchitectuur waarop het besturingssysteem wordt uitgevoerd (dit is meestalx64
). -
<os-version>
: de zelf gerapporteerde versie van het besturingssysteem (in Linux is dit de distributieversie). -
<ps-version>
: de PowerShell-versie (van$PSVersionTable.PSVersion
). -
<ps-arch>
: de machinearchitectuur van het PowerShell-proces. -
<dotnet-version>
: de gerapporteerde versie van de .NET Runtime PowerShell wordt uitgevoerd (vanafSystem.Environment.Version
). -
<dotnet-edition>
: De .NET Runtime-versie van PowerShell wordt uitgevoerd (momenteelframework
ofcore
).
Bijvoorbeeld:
-
win-4_x64_10.0.18312.0_5.1.18312.1000_x64_4.0.30319.42000_framework
is PowerShell 5.1 met Windows 10 Enterprise (build 18312) voor x64. -
win-4_x64_10.0.18312.0_6.1.2_x64_4.0.30319.42000_core
wordt PowerShell 6.1.2 uitgevoerd op hetzelfde besturingssysteem. -
ubuntu_x64_18.04_6.2.0_x64_4.0.30319.42000_core
is PowerShell 6.2.0 uitgevoerd op Ubuntu 18.04.
Sommige platforms worden gebundeld met PSScriptAnalyzer als JSON-bestanden, die op deze manier worden genoemd voor targeting in uw configuratie.
Platformen die standaard zijn gebundeld, zijn:
PowerShell-versie | Besturingssysteem | LEGITIMATIEBEWIJS |
---|---|---|
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 |
Andere profielen vindt u in de GitHub-opslagplaats.
U kunt ook uw eigen platformprofiel genereren met behulp van de PSCompatibilityCollector-module.
De instellingen voor het compatibiliteitsprofiel maken gebruik van een lijst met platforms die onder TargetProfiles
zijn gericht. Een platform kan worden opgegeven als:
- Een platformnaam (zoals
ubuntu_x64_18.04_6.1.1_x64_4.0.30319.42000_core
), die aan het einde.json
toegevoegd en waarnaar wordt gezocht in de standaardprofielmap. - Een bestandsnaam (zoals
my_custom_platform.json
), die wordt gezocht naar de standaardprofielmap. - Een absoluut pad naar een bestand (zoals
D:\PowerShellProfiles\TargetMachine.json
).
De standaardprofielmap bevindt zich onder de PSScriptAnalzyer-module op $PSScriptRoot/compatibility_profiles
(waar $PSScriptRoot
hier verwijst naar de map met PSScriptAnalyzer.psd1
).
De compatibiliteitsanalyse vergelijkt een opdracht die wordt gebruikt voor zowel een doelprofiel als een union-profiel (met alle opdrachten die beschikbaar zijn in elk profiel in de profiel-dir). Als een opdracht niet aanwezig is in het samenvoegprofiel, wordt ervan uitgegaan dat deze lokaal wordt gemaakt en genegeerd. Als een opdracht niet aanwezig is in het samenvoegprofiel, maar niet aanwezig is in een doel, wordt deze als niet compatibel beschouwd met dat doel.
Configuratie-instellingen
Configuratiesleutel | Betekenis | Geaccepteerde waarden | Verplicht | Voorbeeld |
---|---|---|---|---|
Enable |
Hiermee wordt de regel geactiveerd | bool ($true /$false ) |
Nee (standaard: $false ) |
$true |
TargetProfiles |
De lijst met PowerShell-profielen voor het doel | string[]: absolute paden naar profielbestanden of namen van profielen in de profielmap | Nee (standaard: @() ) |
@('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 |
De locatie voor het zoeken naar profielen op naam en voor het genereren van samenvoegprofielen | tekenreeks: absoluut pad naar nieuwe profiel-dir | Nee (standaard ingesteld op compatibility_profiles map in de PSScriptAnalyzer-module |
C:\Users\me\Documents\pssaCompatProfiles |
IgnoreCommands |
Opdrachten om compatibiliteit van scripts te negeren | string[]: namen van opdrachten die moeten worden genegeerd | Nee (standaard: @() ) |
@('Get-ChildItem','Import-Module') |
Een voorbeeldconfiguratie kan er als volgt uitzien:
@{
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'
)
}
}
}
Onderdrukking
Diagnostische gegevens over de compatibiliteit van opdrachten kunnen worden onderdrukt met een kenmerk op het param
blok van een scriptblok, net als bij andere regels.
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands', '')]
De regel kan ook alleen worden onderdrukt voor bepaalde opdrachten:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands',
'Start-Service')]
En ook alleen onderdrukt voor parameters:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands',
'Import-Module/FullyQualifiedName')]