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 tipi che non sono disponibili di default sulle piattaforme PowerShell di bersaglio.
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/PSCompatibilityCollector/profiles (dove $PSScriptRoot qui si riferisce alla directory che contiene PSScriptAnalyzer.psd1).
L'analisi di compatibilità confronta ogni tipo che usi sia con un profilo target che con un profilo union. Il profilo union contiene ogni tipo disponibile in qualsiasi profilo nella directory del profilo.
Se un tipo non è nel profilo sindacale, la regola presume che sia locale per il tuo ambiente e lo ignora. Se un tipo è nel profilo union ma manca in un profilo target, la regola lo segnala come incompatibile con quel target.
Esempio
I seguenti esempi assumono TargetProfiles includa win-48_x64_10.0.17763.0_5.1.17763.316_x64_4.0.30319.42000_framework (Windows 10 Pro, PowerShell 5.1).
Non conforme
System.Management.Automation.SemanticVersion non è disponibile di default in Windows PowerShell 5.1, quindi la regola segnala questo tipo di utilizzo per quel profilo target.
$version = [System.Management.Automation.SemanticVersion]'1.2.3'
Compliant
System.Version è disponibile in Windows PowerShell 5.1 e PowerShell 7, quindi supera i controlli di compatibilità su quei target.
$version = [System.Version]'1.2.3.0'
Configurare regola
Una configurazione di esempio potrebbe essere simile alla seguente:
@{
Rules = @{
PSUseCompatibleTypes = @{
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 types to not check like this, which will also ignore methods and members on it:
IgnoreTypes = @(
'System.IO.Compression.ZipFile'
)
}
}
}
In alternativa, è possibile fornire un oggetto impostazioni come indicato di seguito:
PS> $settings = @{
Rules = @{
PSUseCompatibleTypes = @{
Enable = $true
TargetProfiles = @('win-48_x64_10.0.17763.0_5.1.17763.316_x64_4.0.30319.42000_framework')
}
}
}
PS> Invoke-ScriptAnalyzer -Settings $settings -ScriptDefinition "[System.Management.Automation.SemanticVersion]'1.18.0-rc1'"
RuleName Severity ScriptName Line Message
-------- -------- ---------- ---- -------
PSUseCompatibleTypes Warning 1 The type 'System.Management.Automation.SemanticVersion' is
not available by default in PowerShell version
'5.1.17763.316' on platform 'Microsoft Windows 10 Pro'
Soppressione
Come per altre regole, puoi sopprimere la diagnostica di compatibilità dei tipi aggiungendo un attributo di soppressione al param blocco di uno scriptblock.
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleTypes', '')]
Puoi anche sopprimere la regola per tipi specifici:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleTypes',
'System.Management.Automation.Security.SystemPolicy')]
Puoi anche sopprimerlo per membri specifici di tipo:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleTypes',
'System.Management.Automation.LanguagePrimitives/ConvertTypeNameToPSTypeName')]
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.
IgnoreTypes
Questo parametro specifica i nomi completi dei tipi o degli acceleratori di tipi da escludere dai controlli di compatibilità. Accetta una serie di stringhe di nomi di tipo. Il valore predefinito è @().