Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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 (biasanyax64). -
<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 (dariSystem.Environment.Version). -
<dotnet-edition>: PowerShell rasa runtime .NET berjalan pada (saat iniframeworkataucore).
Misalnya:
-
win-4_x64_10.0.18312.0_5.1.18312.1000_x64_4.0.30319.42000_frameworkadalah 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_coreadalah PowerShell 6.1.2 yang berjalan pada sistem operasi yang sama. -
ubuntu_x64_18.04_6.2.0_x64_4.0.30319.42000_coreadalah 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.jsondan 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')]