ACompatibleCommands használata

Súlyossági szint: Figyelmeztetés

Description

Ez a szabály a célzott PowerShell-platformon nem elérhető parancsokat azonosítja.

A PowerShell-platformot egy név azonosítja a következő formátumban:

<os-name>_<os-arch>_<os-version>_<ps-version>_<ps-arch>_<dotnet-version>_<dotnet-edition>

Ahol:

  • <os-name>: Annak az operációs rendszernek a neve, amelyen a PowerShell fut. Windows rendszeren ez tartalmazza a termékváltozat számát. Linuxon ez a disztribúció neve.
  • <os-arch>: Az operációs rendszer által futtatott géparchitektúra (ez általában x64).
  • <os-version>: Az operációs rendszer saját jelentett verziója (Linuxon ez a terjesztési verzió).
  • <ps-version>: A PowerShell verziója (innen: $PSVersionTable.PSVersion).
  • <ps-arch>: A PowerShell-folyamat gépi architektúrája.
  • <dotnet-version>: A .NET-futtatókörnyezet PowerShell jelentett verziója a következőn fut: ( System.Environment.Version).
  • <dotnet-edition>: A PowerShell .NET-futtatókörnyezeti verziója fut (jelenleg framework vagy core).

Például:

  • win-4_x64_10.0.18312.0_5.1.18312.1000_x64_4.0.30319.42000_frameworkaz x64-hez készült Windows 10 Enterprise (18312-ös build) rendszeren futó PowerShell 5.1.
  • win-4_x64_10.0.18312.0_6.1.2_x64_4.0.30319.42000_core Az ugyanazon az operációs rendszeren futó PowerShell 6.1.2.
  • ubuntu_x64_18.04_6.2.0_x64_4.0.30319.42000_core az Ubuntu 18.04-en futó PowerShell 6.2.0.

Egyes platformok A PSScriptAnalyzer JSON-fájlokként vannak csomagolva, így nevezve el a konfigurációban való célzást.

Az alapértelmezés szerint csomagolt platformok a következők:

PowerShell-verzió Operációs rendszer ID (Azonosító)
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_6.2.4_x64_3.1.2_core

További profilok a GitHub-adattárban találhatók.

A PSCompatibilityCollector modullal saját platformprofilt is létrehozhat.

A kompatibilitási profil beállításai a megcélzandó platformok listáját tartalmazzák a alatt TargetProfiles. A platform a következő módon adható meg:

  • Egy platformnév (például ubuntu_x64_18.04_6.1.1_x64_4.0.30319.42000_core), amely hozzá lesz .json adva a végéhez, és a rendszer az alapértelmezett profilkönyvtárban keres rá.
  • Egy fájlnév (például my_custom_platform.json), amely az alapértelmezett profilkönyvtárban található.
  • Egy fájl abszolút elérési útja (például D:\PowerShellProfiles\TargetMachine.json).

Az alapértelmezett profilkönyvtár a PSScriptAnalzyer modul $PSScriptRoot/compatibility_profiles alatt található (ahol $PSScriptRoot a következő könyvtárra PSScriptAnalyzer.psd1hivatkozik: ).

A kompatibilitáselemzés egy célprofilhoz és egy "egyesítő" profilhoz használt parancsot hasonlít össze (amely a profil dir bármely profiljában elérhető összes parancsot tartalmazza). Ha egy parancs nincs jelen az egyesítő profilban, a rendszer azt feltételezi, hogy helyileg hozza létre és hagyja figyelmen kívül. Ellenkező esetben, ha egy parancs megtalálható az egyesítő profilban, de nem található meg egy célban, akkor a parancs nem kompatibilis ezzel a céllal.

Konfigurációs beállítások

Konfigurációs kulcs Értelmezés Elfogadott értékek Kötelező Példa
Enable A szabály aktiválása bool ($true/$false) Nem (alapértelmezett: $false) $true
TargetProfiles A megcélzandó PowerShell-profilok listája string[]: a profilfájlok vagy profilok neveinek abszolút elérési útjai a profilkönyvtárban Nem (alapértelmezett: @()) @('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 A profilok név szerinti keresésének és az egyesítő profilok létrehozásának helye string: az új profil dir abszolút elérési útja Nem (alapértelmezés szerint könyvtár a compatibility_profiles PSScriptAnalyzer modulban) C:\Users\me\Documents\pssaCompatProfiles
IgnoreCommands Parancsok a szkriptek kompatibilitásának figyelmen kívül hagyásához string[]: figyelmen kívül hagyandó parancsok neve Nem (alapértelmezett: @()) @('Get-ChildItem','Import-Module')

Egy példakonfiguráció a következőképpen nézhet ki:

@{
    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'
            )
        }
    }
}

Mellőzés

A parancskompatibilitási diagnosztikát letilthatja egy attribútummal a param szkriptblokkban, mint más szabályok esetén.

[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands', '')]

A szabályt csak bizonyos parancsok esetén lehet letiltani:

[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands', 'Start-Service')]

És csak paraméterek esetén is letiltva:

[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands', 'Import-Module/FullyQualifiedName')]