Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
allvarlighetsgrad: Varning
Beskrivning
Den här regeln identifierar typer som inte är tillgängliga (inlästa som standard) i målbaserade PowerShell-plattformar.
En PowerShell-plattform identifieras med ett namn i följande format:
<os-name>_<os-arch>_<os-version>_<ps-version>_<ps-arch>_<dotnet-version>_<dotnet-edition>
Var:
- 
              <os-name>: Namnet på operativsystemet PowerShell körs på. I Windows innehåller detta SKU-numret. I Linux är det här namnet på distributionen.
- 
              <os-arch>: Datorarkitekturen som operativsystemet körs på (detta är vanligtvisx64).
- 
              <os-version>: Den självrapporterade versionen av operativsystemet (i Linux är det här distributionsversionen).
- 
              <ps-version>: PowerShell-versionen (från$PSVersionTable.PSVersion).
- 
              <ps-arch>: Datorarkitekturen för PowerShell-processen.
- 
              <dotnet-version>: Den rapporterade versionen av .NET Runtime PowerShell körs på (frånSystem.Environment.Version).
- 
              <dotnet-edition>: .NET-körningssmaken PowerShell körs på (för närvarandeframeworkellercore).
Till exempel:
- 
              win-4_x64_10.0.18312.0_5.1.18312.1000_x64_4.0.30319.42000_frameworkkörs PowerShell 5.1 på Windows 10 Enterprise (version 18312) för x64.
- 
              win-4_x64_10.0.18312.0_6.1.2_x64_4.0.30319.42000_corekörs PowerShell 6.1.2 på samma operativsystem.
- 
              ubuntu_x64_18.04_6.2.0_x64_4.0.30319.42000_corekörs PowerShell 6.2.0 på Ubuntu 18.04.
Vissa plattformar levereras med PSScriptAnalyzer som JSON-filer, namngivna på det här sättet för målinriktning i konfigurationen.
Plattformar som paketeras som standard är:
| PowerShell-version | Operativsystem | 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 | 
Andra profiler finns på GitHub-lagringsplatsen.
Du kan också generera en egen plattformsprofil med hjälp av modulen PSCompatibilityCollector.
Inställningarna för kompatibilitetsprofilen tar en lista över plattformar som ska riktas under TargetProfiles. En plattform kan anges som:
- Ett plattformsnamn (till exempel ubuntu_x64_18.04_6.1.1_x64_4.0.30319.42000_core), som kommer att ha.jsonlagts till i slutet och söks efter i standardprofilkatalogen.
- Ett filnamn (till exempel my_custom_platform.json), som söks efter i standardprofilkatalogen.
- En absolut sökväg till en fil (som D:\PowerShellProfiles\TargetMachine.json).
Standardprofilkatalogen finns under MODULen PSScriptAnalzyer på $PSScriptRoot/PSCompatibilityCollector/profiles (där $PSScriptRoot här refererar till katalogen som innehåller PSScriptAnalyzer.psd1).
Kompatibilitetsanalysen jämför en typ som används med både en målprofil och en "union"-profil (som innehåller alla typer som är tillgängliga i alla profil i profildir). Om en typ inte finns i unionsprofilen antas den vara lokalt skapad och ignorerad. Annars, om en typ finns i unionsprofilen men inte finns i ett mål, anses den vara inkompatibel med det målet.
Konfigurationsinställningar
| Konfigurationsnyckel | Betydelse | Godkända värden | Obligatorisk | Exempel | 
|---|---|---|---|---|
| Enable | Aktiverar regeln | bool ( $true/$false) | Nej (standard: $false) | $true | 
| TargetProfiles | Listan över PowerShell-profiler som ska riktas mot | string[]: absoluta sökvägar till profilfiler eller namn på profiler i profilkatalogen | Nej (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 | Platsen för att söka efter profiler efter namn och användning för generering av unionsprofiler | sträng: absolut sökväg till ny profildir | Nej (standardvärdet är compatibility_profileskatalog i PSScriptAnalyzer-modulen | C:\Users\me\Documents\pssaCompatProfiles | 
| IgnoreTypes | Fullständiga namn på typer eller typacceleratorer för att ignorera kompatibilitet i skript | string[]: namn på typer som ska ignoreras | Nej (standard: @()) | @('System.Collections.ArrayList','string') | 
En exempelkonfiguration kan se ut så här:
@{
    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'
            )
        }
    }
}
Du kan också ange ett inställningsobjekt på följande sätt:
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'
Undertryckande
Kommandokompatibilitetsdiagnostik kan ignoreras med ett attribut på param-blocket i en scriptblock som med andra regler.
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleTypes', '')]
Regeln kan också ignoreras endast för vissa typer:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleTypes',
    'System.Management.Automation.Security.SystemPolicy')]
Och undertrycks endast för typmedlemmar:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands',
    'System.Management.Automation.LanguagePrimitives/ConvertTypeNameToPSTypeName')]