Bagikan melalui


UseCompatibleCommands

Tingkat Keparahan: Peringatan

Deskripsi

Aturan ini mengidentifikasi perintah yang tidak tersedia pada platform PowerShell yang ditargetkan.

Platform PowerShell diidentifikasi dengan nama dalam format berikut:

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

Di mana:

  • <os-name>: Nama sistem operasi PowerShell sedang berjalan. Pada Windows, ini termasuk nomor SKU. Di Linux, ini adalah nama distribusi.
  • <os-arch>: Arsitektur mesin yang dijalankan sistem operasi (ini biasanya x64).
  • <os-version>: Versi sistem operasi yang dilaporkan sendiri (di Linux, ini adalah versi distribusi).
  • <ps-version>: Versi PowerShell (dari $PSVersionTable.PSVersion).
  • <ps-arch>: Arsitektur mesin dari proses PowerShell.
  • <dotnet-version>: Versi yang dilaporkan dari PowerShell runtime .NET berjalan pada (dari System.Environment.Version).
  • <dotnet-edition>: PowerShell rasa runtime .NET berjalan pada (saat ini framework atau core).

Contohnya:

  • win-4_x64_10.0.18312.0_5.1.18312.1000_x64_4.0.30319.42000_frameworkadalah PowerShell 5.1 yang berjalan pada Windows 10 Enterprise (build 18312) untuk x64.
  • win-4_x64_10.0.18312.0_6.1.2_x64_4.0.30319.42000_core adalah PowerShell 6.1.2 yang berjalan pada sistem operasi yang sama.
  • ubuntu_x64_18.04_6.2.0_x64_4.0.30319.42000_core adalah PowerShell 6.2.0 yang berjalan di Ubuntu 18.04.

Beberapa platform dibundel dengan PSScriptAnalyzer sebagai file JSON, dinamai dengan cara ini untuk penargetan dalam konfigurasi Anda.

Platform yang dibundel secara default adalah:

Versi PowerShell Sistem Operasi 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 2012R2 win-8_x64_6.3.9600.0_4.0_x64_4.0.30319.42000_framework
5.1 Server Windows 2016 win-8_x64_10.0.14393.0_5.1.14393.2791_x64_4.0.30319.42000_framework
5.1 Server Windows 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 Server Windows 2016 win-8_x64_10.0.14393.0_6.2.4_x64_4.0.30319.42000_core
6.2 Server Windows 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 Server Windows 2016 win-8_x64_10.0.14393.0_7.0.0_x64_3.1.2_core
7.0 Server Windows 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

Profil lain dapat ditemukan di repositori GitHub.

Anda juga dapat membuat profil platform Anda sendiri menggunakan modul PSCompatibilityCollector.

Pengaturan profil kompatibilitas mengambil daftar platform untuk ditargetkan di bawah TargetProfiles. Platform dapat ditentukan sebagai:

  • Nama platform (seperti ubuntu_x64_18.04_6.1.1_x64_4.0.30319.42000_core), yang akan .json ditambahkan ke akhir dan dicari di direktori profil default.
  • Nama file (seperti my_custom_platform.json), yang akan dicari di direktori profil default.
  • Jalur absolut ke file (seperti D:\PowerShellProfiles\TargetMachine.json).

Direktori profil default berada di bawah modul PSScriptAnalzyer di (di mana $PSScriptRoot di $PSScriptRoot/compatibility_profiles sini mengacu pada direktori yang berisi PSScriptAnalyzer.psd1).

Analisis kompatibilitas membandingkan perintah yang digunakan untuk profil target dan profil 'union' (berisi semua perintah yang tersedia di profil apa pun di dir profil). Jika perintah tidak ada di profil gabungan, perintah diasumsikan dibuat dan diabaikan secara lokal. Jika tidak, jika perintah ada di profil serikat tetapi tidak ada dalam target, dianggap tidak kompatibel dengan target tersebut.

Pengaturan konfigurasi

Kunci Konfigurasi Makna Nilai yang diterima Wajib Contoh
Enable Mengaktifkan aturan bool ($true/$false) Tidak (default: $false) $true
TargetProfiles Daftar profil PowerShell yang akan ditargetkan string[]: jalur absolut ke file profil atau nama profil di direktori profil Tidak (default: @()) @('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 Lokasi untuk mencari profil berdasarkan nama dan digunakan untuk pembuatan profil gabungan string: jalur absolut ke dir profil baru Tidak (default ke compatibility_profiles direktori dalam modul PSScriptAnalyzer C:\Users\me\Documents\pssaCompatProfiles
IgnoreCommands Perintah untuk mengabaikan kompatibilitas dalam skrip string[]: nama perintah yang akan diabaikan Tidak (default: @()) @('Get-ChildItem','Import-Module')

Contoh konfigurasi mungkin terlihat seperti:

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

Supresi

Diagnostik kompatibilitas perintah dapat ditekan dengan atribut pada param blok blok skrip seperti halnya aturan lain.

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

Aturan juga dapat ditekan hanya untuk perintah tertentu:

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

Dan juga ditekan hanya untuk parameter:

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