GunakanCompatibleCommands

Tingkat Keparahan : Peringatan

Status default: Dinonaktifkan

Deskripsi

Aturan ini mendeteksi perintah yang tidak tersedia di platform PowerShell yang ditargetkan.

Nama platform PowerShell menggunakan format berikut:

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

Mana:

  • <os-name>: Nama sistem operasi PowerShell sedang berjalan. Di Windows, nomor SKU disertakan. Di Linux, nilainya adalah nama distribusi.
  • <os-arch>: Arsitektur mesin yang dijalankan sistem operasi (biasanya x64).
  • <os-version>: Versi sistem operasi yang dilaporkan sendiri (versi distribusi di Linux).
  • <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).

Misalnya:

  • win-4_x64_10.0.18312.0_5.1.18312.1000_x64_4.0.30319.42000_framework adalah PowerShell 5.1 yang berjalan di 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.

PSScriptAnalyzer menyertakan beberapa profil platform sebagai file JSON. Anda dapat menargetkan profil bawaan ini langsung di 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 2012 R2 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 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

Profil lain dapat ditemukan direpositori GitHub .

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

Pengaturan kompatibilitas mengambil daftar platform di bawah TargetProfiles. Anda dapat menentukan setiap platform target sebagai:

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

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

Analisis kompatibilitas membandingkan setiap perintah yang Anda gunakan terhadap profil target dan profil gabungan. Profil gabungan berisi setiap perintah yang tersedia di profil apa pun di direktori profil.

Jika perintah tidak ada di profil gabungan, aturan tersebut mengasumsikan perintah tersebut lokal ke lingkungan Anda dan mengabaikannya. Jika perintah ada di profil gabungan tetapi tidak ada dari profil target, aturan menandainya sebagai tidak kompatibel dengan target tersebut.

Contoh

Contoh berikut mengasumsikan TargetProfiles termasuk ubuntu_x64_18.04_6.2.4_x64_4.0.30319.42000_core (Ubuntu 18.04, PowerShell 6.2).

Tidak sesuai

function Get-OsInfo {
    $os = Get-WmiObject -Class Win32_OperatingSystem
    return $os.Caption
}

Sesuai

function Get-OsInfo {
    $os = Get-CimInstance -ClassName Win32_OperatingSystem
    return $os.Caption
}

Mengonfigurasi aturan

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

Parameters

Enable

Parameter ini mengontrol apakah ScriptAnalyzer memeriksa kode terhadap aturan ini. Ini menerima nilai boolean. Untuk mengaktifkan aturan ini, atur parameter ini ke $true. Nilai defaultnya adalah $false.

Profil Target

Parameter ini menentukan daftar profil platform untuk memeriksa kompatibilitas. Ini menerima sekumpulan string. Setiap nilai dapat berupa nama platform, nama file, atau jalur absolut ke file profil. Nilai defaultnya adalah @().

ProfilDirPath

Parameter ini mengontrol direktori yang dicari profil oleh ScriptAnalyzer berdasarkan nama dan digunakan untuk menghasilkan profil gabungan. Ini menerima string yang berisi jalur absolut. Lokasi default adalah compatibility_profiles direktori dalam modul PSScriptAnalyzer.

Abaikan Perintah

Parameter ini menentukan perintah untuk dikecualikan dari pemeriksaan kompatibilitas. Ini menerima array string nama perintah. Nilai defaultnya adalah @().

Penindasan

Seperti aturan lainnya, Anda dapat menekan diagnostik kompatibilitas perintah dengan menambahkan atribut penekanan ke param blok blok skrip.

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

Anda juga dapat menekan aturan untuk perintah tertentu:

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

Anda juga dapat menekannya untuk parameter tertentu:

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