Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
livello di gravità : avviso
Descrizione
Questa regola rileva i comandi non disponibili sulla piattaforma PowerShell di cui sei destinata.
Un nome nella piattaforma PowerShell è identificato nel seguente formato:
<os-name>_<os-arch>_<os-version>_<ps-version>_<ps-arch>_<dotnet-version>_<dotnet-edition>
Dove:
-
<os-name>: il nome del sistema operativo in cui è in esecuzione PowerShell. Su Windows, il numero SKU è incluso. Su Linux, il valore è il nome della distribuzione. -
<os-arch>: L'architettura della macchina su cui il sistema operativo gira (di solitox64). -
<os-version>: La versione auto-riportata del sistema operativo (la versione di distribuzione su Linux). -
<ps-version>: versione di PowerShell (da$PSVersionTable.PSVersion). -
<ps-arch>: architettura del computer del processo di PowerShell. -
<dotnet-version>: la versione segnalata di PowerShell del runtime .NET è in esecuzione (daSystem.Environment.Version). -
<dotnet-edition>: il tipo di runtime .NET di PowerShell è in esecuzione (attualmenteframeworkocore).
Per esempio:
-
win-4_x64_10.0.18312.0_5.1.18312.1000_x64_4.0.30319.42000_frameworkè PowerShell 5.1 in esecuzione in Windows 10 Enterprise (build 18312) per x64. -
win-4_x64_10.0.18312.0_6.1.2_x64_4.0.30319.42000_coreè PowerShell 6.1.2 in esecuzione nello stesso sistema operativo. -
ubuntu_x64_18.04_6.2.0_x64_4.0.30319.42000_coreè PowerShell 6.2.0 in esecuzione in Ubuntu 18.04.
PSScriptAnalyzer include alcuni profili di piattaforma come file JSON. Puoi indirizzare direttamente questi profili integrati nella tua configurazione.
Le piattaforme raggruppate per impostazione predefinita sono:
| Versione di PowerShell | Sistema operativo | 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 | 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 |
Altri profili sono disponibili nel repository GitHub .
Puoi anche generare il tuo profilo di piattaforma con il modulo PSCompatibilityCollector.
Le impostazioni di compatibilità includono un elenco delle piattaforme sotto TargetProfiles. Puoi specificare ogni piattaforma target come:
- Un nome di piattaforma (ad esempio,
ubuntu_x64_18.04_6.1.1_x64_4.0.30319.42000_core). PSScriptAnalyzer lo aggiunge.jsone lo cerca nella directory profilo predefinita. - Un nome file (ad esempio,
my_custom_platform.json), che PSScriptAnalyzer cerca nella cartella profilo predefinita. - Percorso assoluto di un file , ad esempio
D:\PowerShellProfiles\TargetMachine.json.
La directory profilo predefinita si trova sotto il modulo PSScriptAnalyzer a $PSScriptRoot/compatibility_profiles (dove $PSScriptRoot qui si riferisce alla directory che contiene PSScriptAnalyzer.psd1).
L'analisi di compatibilità confronta ogni comando che usi sia con un profilo target che con un profilo union. Il profilo unione contiene ogni comando disponibile in qualsiasi profilo nella directory del profilo.
Se un comando non è nel profilo union, la regola presume che sia locale al tuo ambiente e lo ignora. Se un comando è nel profilo unione ma manca in un profilo target, la regola lo segnala come incompatibile con quel target.
Esempio
I seguenti esempi assumono TargetProfiles ( ubuntu_x64_18.04_6.2.4_x64_4.0.30319.42000_core Ubuntu 18.04, PowerShell 6.2).
Non conforme
function Get-OsInfo {
$os = Get-WmiObject -Class Win32_OperatingSystem
return $os.Caption
}
Compliant
function Get-OsInfo {
$os = Get-CimInstance -ClassName Win32_OperatingSystem
return $os.Caption
}
Configurare regola
@{
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'
)
}
}
}
Soppressione
Come per altre regole, puoi sopprimere la diagnostica di compatibilità dei comandi aggiungendo un attributo di soppressione al param blocco di uno scriptblock.
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands', '')]
Puoi anche sopprimere la regola per comandi specifici:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands',
'Start-Service')]
Puoi anche sopprimerlo per parametri specifici:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands',
'Import-Module/FullyQualifiedName')]
Parameters
Enable
Questo parametro controlla se ScriptAnalyzer verifica il codice rispetto a questa regola. Accetta un valore booleano. Per abilitare questa regola, imposta questo parametro a $true. Il valore predefinito è $false.
Profili Target
Questo parametro specifica l'elenco dei profili piattaforma con cui verificare la compatibilità. Accetta una matrice di stringhe. Ogni valore può essere un nome di piattaforma, un nome di file o un percorso assoluto verso un file profilo. Il valore predefinito è @().
ProfileDirPath
Questo parametro controlla la directory che ScriptAnalyzer cerca per i profili per nome e utilizza per generare il profilo union. Accetta una stringa che contiene un percorso assoluto. La posizione predefinita è la compatibility_profiles directory nel modulo PSScriptAnalyzer.
IgnoraCommandi
Questo parametro specifica i comandi da escludere dai controlli di compatibilità. Accetta un array di stringhe di nomi di comando. Il valore predefinito è @().