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 (zwyklex64
jest to ).<os-version>
: samodzielna wersja systemu operacyjnego (w systemie Linux jest to wersja dystrybucji).<ps-version>
: wersja programu PowerShell (z$PSVersionTable.PSVersion
programu ).<ps-arch>
: architektura komputera procesu programu PowerShell.<dotnet-version>
: zgłoszona wersja środowiska uruchomieniowego programu PowerShell platformy .NET jest uruchomiona w programie (zSystem.Environment.Version
programu ).<dotnet-edition>
: Program PowerShell w środowisku uruchomieniowym platformy .NET jest uruchomiony w systemie (obecnieframework
lubcore
).
Na przykład:
win-4_x64_10.0.18312.0_5.1.18312.1000_x64_4.0.30319.42000_framework
program 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.psd1
plik ).
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')]
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla