Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Önem Derecesi: Uyarı
Açıklama
Bu kural, hedeflenen PowerShell platformlarında kullanılamayan (varsayılan olarak yüklenen) türleri tanımlar.
PowerShell platformu aşağıdaki biçimde bir adla tanımlanır:
<os-name>_<os-arch>_<os-version>_<ps-version>_<ps-arch>_<dotnet-version>_<dotnet-edition>
Nerede:
-
<os-name>: PowerShell'in üzerinde çalıştığı işletim sisteminin adı. Windows'ta bu, SKU numarasını içerir. Linux'ta bu, dağıtımın adıdır. -
<os-arch>: İşletim sisteminin üzerinde çalıştığı makine mimarisi (bu genelliklex64). -
<os-version>: İşletim sisteminin kendi kendine bildirilen sürümü (Linux'ta bu dağıtım sürümüdür). -
<ps-version>: PowerShell sürümü ($PSVersionTable.PSVersion). -
<ps-arch>: PowerShell işleminin makine mimarisi. -
<dotnet-version>: PowerShell çalışma zamanının bildirilen sürümü üzerinde çalışıyor (System.Environment.Version). -
<dotnet-edition>: PowerShell üzerinde çalışan .NET çalışma zamanı türü (şu andaframeworkveyacore).
Mesela:
-
win-4_x64_10.0.18312.0_5.1.18312.1000_x64_4.0.30319.42000_framework, x64 için Windows 10 Enterprise'da (derleme 18312) çalışan PowerShell 5.1'dir. -
win-4_x64_10.0.18312.0_6.1.2_x64_4.0.30319.42000_coreaynı işletim sisteminde çalışan PowerShell 6.1.2'dir. -
ubuntu_x64_18.04_6.2.0_x64_4.0.30319.42000_core, Ubuntu 18.04 üzerinde çalışan PowerShell 6.2.0'dır.
Bazı platformlar, yapılandırmanızda hedefleme için bu şekilde adlandırılan JSON dosyaları olarak PSScriptAnalyzer ile birlikte gelir.
Varsayılan olarak paketlenmiş platformlar şunlardır:
| PowerShell Sürümü | İşletim Sistemi | KİMLİĞİ |
|---|---|---|
| 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 |
Diğer profiller GitHub deposunda bulunabilir.
ayrıca
Uyumluluk profili ayarları, TargetProfilesaltında hedef edilecek platformların listesini alır. Bir platform şu şekilde belirtilebilir:
- Sonuna
ubuntu_x64_18.04_6.1.1_x64_4.0.30319.42000_coreeklenecek ve varsayılan profil dizininde aranacak bir platform adı (.jsongibi). - Varsayılan profil dizininde için aranacak bir dosya adı (
my_custom_platform.jsongibi). - Dosyanın mutlak yolu (
D:\PowerShellProfiles\TargetMachine.jsongibi).
Varsayılan profil dizini, $PSScriptRoot/PSCompatibilityCollector/profiles'daki PSScriptAnalzyer modülünün altındadır (burada $PSScriptRootPSScriptAnalyzer.psd1içeren dizini ifade eder).
Uyumluluk analizi, hem hedef profil hem de 'birleşim' profili için kullanılan bir türü karşılaştırır (profil dirindeki herhangi bir profili
Yapılandırma ayarları
| Yapılandırma anahtarı | Anlam | Kabul edilen değerler | Zorunlu | Örnek |
|---|---|---|---|---|
Enable |
Kuralı etkinleştirir | bool ($true/$false) |
Hayır (varsayılan: $false) |
$true |
TargetProfiles |
Hedeflene PowerShell profillerinin listesi | string[]: profil dizinindeki profil dosyalarının veya profil adlarının mutlak yolları | Hayır (varsayılan: @()) |
@('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 |
Profiller ada göre aranacak ve birleşim profili oluşturma için kullanılacak konum | string: yeni profil dirine mutlak yol | Hayır (PSScriptAnalyzer modülünde varsayılan olarak compatibility_profiles dizini kullanılır |
C:\Users\me\Documents\pssaCompatProfiles |
IgnoreTypes |
Betiklerdeki uyumluluğu yoksaymak için tür veya tür hızlandırıcılarının tam adları | string[]: yoksaymak için türlerin adları | Hayır (varsayılan: @()) |
@('System.Collections.ArrayList','string') |
Örnek bir yapılandırma şöyle görünebilir:
@{
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'
)
}
}
}
Alternatif olarak, aşağıdaki gibi bir ayarlar nesnesi sağlayabilirsiniz:
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'
Bastırma
Komut uyumluluğu tanılamaları, diğer kurallarda olduğu gibi bir betik bloğunun param bloğundaki bir öznitelikle gizlenebilir.
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleTypes', '')]
Kural yalnızca belirli türler için de gizlenebilir:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleTypes',
'System.Management.Automation.Security.SystemPolicy')]
Ayrıca yalnızca tür üyeleri için de gösterilmez:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands',
'System.Management.Automation.LanguagePrimitives/ConvertTypeNameToPSTypeName')]