Udostępnij za pośrednictwem


UseCompatibleTypes

Poziom ważności: ostrzeżenie

Opis

Ta reguła identyfikuje typy, które nie są dostępne (domyślnie załadowane) na docelowych platformach programu PowerShell.

Platforma programu PowerShell jest identyfikowana przez nazwę w następującym formacie:

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

Gdzie:

  • <os-name>: nazwa systemu operacyjnego Programu PowerShell jest uruchomiona. W systemie Windows obejmuje to numer jednostki SKU. W systemie Linux jest to nazwa dystrybucji.
  • <os-arch>: Architektura komputera, na którym działa system operacyjny (zwykle x64jest to ).
  • <os-version>: samodzielna wersja systemu operacyjnego (w systemie Linux jest to wersja dystrybucji).
  • <ps-version>: wersja programu PowerShell (z $PSVersionTable.PSVersionprogramu ).
  • <ps-arch>: architektura komputera procesu programu PowerShell.
  • <dotnet-version>: zgłoszona wersja środowiska uruchomieniowego programu PowerShell platformy .NET jest uruchomiona w programie (z System.Environment.Versionprogramu ).
  • <dotnet-edition>: Program PowerShell w środowisku uruchomieniowym platformy .NET jest uruchomiony w systemie (obecnie framework lub core).

Na przykład:

  • win-4_x64_10.0.18312.0_5.1.18312.1000_x64_4.0.30319.42000_frameworkprogram PowerShell 5.1 działa w Windows 10 Enterprise (kompilacja 18312) dla wersji x64.
  • win-4_x64_10.0.18312.0_6.1.2_x64_4.0.30319.42000_core program PowerShell 6.1.2 działa w tym samym systemie operacyjnym.
  • ubuntu_x64_18.04_6.2.0_x64_4.0.30319.42000_core program PowerShell 6.2.0 działa w systemie Ubuntu 18.04.

Niektóre platformy są połączone z plikiem PSScriptAnalyzer jako pliki JSON, nazwane w ten sposób do określania wartości docelowej w konfiguracji.

Platformy dołączone domyślnie to:

Wersja programu PowerShell System operacyjny ID (Identyfikator)
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_7.0.0_x64_3.1.2_core

Inne profile można znaleźć w repozytorium GitHub.

Możesz również wygenerować własny profil platformy przy użyciu modułu PSCompatibilityCollector.

Ustawienia profilu zgodności zawierają listę platform docelowych w obszarze TargetProfiles. Platformę można określić jako:

  • Nazwa platformy (na przykład ubuntu_x64_18.04_6.1.1_x64_4.0.30319.42000_core), która zostanie dodana do końca i zostanie .json wyszukana w domyślnym katalogu profilu.
  • Nazwa pliku (na przykład my_custom_platform.json), która będzie wyszukiwana w domyślnym katalogu profilu.
  • Ścieżka bezwzględna do pliku (na przykład D:\PowerShellProfiles\TargetMachine.json).

Domyślny katalog profilu znajduje się w module PSScriptAnalzyer pod adresem $PSScriptRoot/PSCompatibilityCollector/profiles (gdzie $PSScriptRoot tutaj odwołuje się do katalogu zawierającego PSScriptAnalyzer.psd1plik ).

Analiza zgodności porównuje typ używany zarówno do profilu docelowego, jak i profilu "unii" (zawierający wszystkie typy dostępne w dowolnym profilu w dir profilu). Jeśli typ nie istnieje w profilu unii, zakłada się, że zostanie utworzony lokalnie i zignorowany. W przeciwnym razie, jeśli typ znajduje się w profilu unii, ale nie jest obecny w obiekcie docelowym, jest uznawany za niezgodny z tym celem.

Ustawienia konfiguracji

Klucz konfiguracji Znaczenie Dopuszczalne wartości Obowiązkowy Przykład
Enable Aktywuje regułę bool ($true/$false) Nie (wartość domyślna: $false) $true
TargetProfiles Lista profilów programu PowerShell do kierowania string[]: ścieżki bezwzględne do plików profilu lub nazw profilów w katalogu profilu Nie (wartość domyślna: @()) @('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 Lokalizacja do wyszukiwania profilów według nazwy i użycia dla generowania profilu unii ciąg: ścieżka bezwzględna do nowego dir profilu Nie (domyślnie do compatibility_profiles katalogu w module PSScriptAnalyzer) C:\Users\me\Documents\pssaCompatProfiles
IgnoreTypes Pełne nazwy typów lub akceleratorów typów do ignorowania zgodności skryptów string[]: nazwy typów do zignorowania Nie (wartość domyślna: @()) @('System.Collections.ArrayList','string')

Przykładowa konfiguracja może wyglądać następująco:

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

Alternatywnie można podać obiekt ustawień w następujący sposób:

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'

Pomijanie

Diagnostyka zgodności poleceń można pominąć za pomocą atrybutu bloku param skryptu, tak jak w przypadku innych reguł.

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

Regułę można również pominąć tylko dla określonych typów:

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

Pomijane są również tylko elementy członkowskie typu:

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