Aracılığıyla paylaş


UseCompatibleCommands

Önem Derecesi: Uyarı

Açıklama

Bu kural, hedeflenen bir PowerShell platformunda kullanılamayan komutları 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 genellikle x64).
  • <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 anda framework veya core).

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_core aynı 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ıcaPSCompatibilityCollector modülünü kullanarak kendi platform profilinizi oluşturabilirsiniz.

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_core eklenecek 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/compatibility_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 komutu karşılaştırır (profil dirindeki herhangi bir profili kullanılabilir tüm komutları içerir). Birleşim profilinde bir komut yoksa, yerel olarak oluşturulduğu ve yoksayıldığı varsayılır. Aksi takdirde, birleşim profilinde bir komut varsa ancak bir hedefte yoksa, bu hedefle uyumsuz olduğu kabul edilir.

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
IgnoreCommands Betiklerin uyumluluğunu yoksaymak için komutlar string[]: yoksaymak için komutların adları Hayır (varsayılan: @()) @('Get-ChildItem','Import-Module')

Örnek bir yapılandırma şöyle görünebilir:

@{
    Rules = @{
        PSUseCompatibleCommands = @{
            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 commands to not check like this, which also will ignore its parameters:
            IgnoreCommands = @(
                'Install-Module'
            )
        }
    }
}

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

Kural yalnızca belirli komutlar için de gizlenebilir:

[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands',
    'Start-Service')]

Ayrıca yalnızca parametreler için de gösterilmez:

[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands',
    'Import-Module/FullyQualifiedName')]