Delen via


UseCompatibleTypes

ernstniveau: waarschuwing

Beschrijving

Met deze regel worden typen geïdentificeerd die niet beschikbaar zijn (standaard geladen) in de betreffende PowerShell-platformen.

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 meestal x64).
  • <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 (vanaf System.Environment.Version).
  • <dotnet-edition>: De .NET Runtime-versie van PowerShell wordt uitgevoerd (momenteel framework of core).

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 TargetProfileszijn 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/PSCompatibilityCollector/profiles (waar $PSScriptRoot hier verwijst naar de map met PSScriptAnalyzer.psd1).

De compatibiliteitsanalyse vergelijkt een type dat wordt gebruikt voor zowel een doelprofiel als een union-profiel (met alle typen die beschikbaar zijn in elk profiel in de profiel-dir). Als een type niet aanwezig is in het samenvoegprofiel, wordt ervan uitgegaan dat het lokaal wordt gemaakt en genegeerd. Als een type niet aanwezig is in het samenvoegprofiel, maar niet aanwezig is in een doel, wordt het beschouwd als niet compatibel 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
IgnoreTypes Volledige namen van typen of typeversnellers om compatibiliteit van in scripts te negeren tekenreeks[]: namen van typen die moeten worden genegeerd Nee (standaard: @()) @('System.Collections.ArrayList','string')

Een voorbeeldconfiguratie kan er als volgt uitzien:

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

U kunt ook als volgt een instellingenobject opgeven:

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'

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('PSUseCompatibleTypes', '')]

De regel kan ook alleen worden onderdrukt voor bepaalde typen:

[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleTypes',
    'System.Management.Automation.Security.SystemPolicy')]

En wordt ook alleen onderdrukt voor typeleden:

[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands',
    'System.Management.Automation.LanguagePrimitives/ConvertTypeNameToPSTypeName')]