Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
ernstniveau: waarschuwing
Beschrijving
Deze regel detecteert types die standaard niet beschikbaar zijn op je beoogde PowerShell-platforms.
Een naam in het PowerShell-platform wordt geïdentificeerd in het volgende formaat:
<os-name>_<os-arch>_<os-version>_<ps-version>_<ps-arch>_<dotnet-version>_<dotnet-edition>
Waar:
-
<os-name>: de naam van het besturingssysteem waarop PowerShell wordt uitgevoerd. Op Windows is het SKU-nummer inbegrepen. Op Linux is de waarde de naam van de distributie. -
<os-arch>: De machinearchitectuur waarop het besturingssysteem draait (meestalx64). -
<os-version>: De zelfgerapporteerde versie van het besturingssysteem (de distributieversie op Linux). -
<ps-version>: de PowerShell-versie (van$PSVersionTable.PSVersion). -
<ps-arch>: de machinearchitectuur van het PowerShell-proces. -
<dotnet-version>: de gerapporteerde versie van de .NET Runtime PowerShell wordt uitgevoerd (vanafSystem.Environment.Version). -
<dotnet-edition>: De .NET Runtime-versie van PowerShell wordt uitgevoerd (momenteelframeworkofcore).
Bijvoorbeeld:
-
win-4_x64_10.0.18312.0_5.1.18312.1000_x64_4.0.30319.42000_frameworkis PowerShell 5.1 met Windows 10 Enterprise (build 18312) voor x64. -
win-4_x64_10.0.18312.0_6.1.2_x64_4.0.30319.42000_corewordt PowerShell 6.1.2 uitgevoerd op hetzelfde besturingssysteem. -
ubuntu_x64_18.04_6.2.0_x64_4.0.30319.42000_coreis PowerShell 6.2.0 uitgevoerd op Ubuntu 18.04.
PSScriptAnalyzer bevat enkele platformprofielen als JSON-bestanden. Je kunt deze ingebouwde profielen direct in je configuratie targeten.
Platformen die standaard zijn gebundeld, zijn:
| PowerShell-versie | Besturingssysteem | LEGITIMATIEBEWIJS |
|---|---|---|
| 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 |
Andere profielen vindt u in de GitHub-opslagplaats.
Je kunt ook je eigen platformprofiel aanmaken met de PSCompatibilityCollector-module.
Compatibiliteitsinstellingen nemen een lijst van platforms onder TargetProfiles. Je kunt elk doelplatform specificeren als:
- Een platformnaam (bijvoorbeeld
ubuntu_x64_18.04_6.1.1_x64_4.0.30319.42000_core). PSScriptAnalyzer voegt.jsonhet toe en zoekt ernaar in de standaard profielmap. - Een bestandsnaam (bijvoorbeeld
my_custom_platform.json), waar PSScriptAnalyzer naar zoekt in de standaard profielmap. - Een absoluut pad naar een bestand (zoals
D:\PowerShellProfiles\TargetMachine.json).
De standaard profielmap bevindt zich onder de PSScriptAnalyzer-module ($PSScriptRoot/PSCompatibilityCollector/profileswaar $PSScriptRoot hier wordt verwezen naar de map die ).PSScriptAnalyzer.psd1
De compatibiliteitsanalyse vergelijkt elk type dat je gebruikt met zowel een doelprofiel als een union-profiel. Het union-profiel bevat elk type dat beschikbaar is in elk profiel in de profieldirectory.
Als een type niet in het union-profiel staat, gaat de regel ervan uit dat het lokaal is in jouw omgeving en negeert het. Als een type in het unieprofiel zit maar ontbreekt in een doelprofiel, markeert de regel het als incompatibel met dat doelwit.
Voorbeeld
De volgende voorbeelden gaan ervan uit dat TargetProfileswin-48_x64_10.0.17763.0_5.1.17763.316_x64_4.0.30319.42000_framework omvat (Windows 10 Pro, PowerShell 5.1).
Niet conform
System.Management.Automation.SemanticVersion is standaard niet beschikbaar in Windows PowerShell 5.1, dus de regel markeert dit type gebruik voor dat doelprofiel.
$version = [System.Management.Automation.SemanticVersion]'1.2.3'
Compliant
System.Version is beschikbaar in Windows PowerShell 5.1 en PowerShell 7, dus het doorstaat compatibiliteitscontroles over die doelen.
$version = [System.Version]'1.2.3.0'
Configureerregel
Een voorbeeldconfiguratie kan er als volgt uitzien:
@{
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'
)
}
}
}
U kunt ook als volgt een instellingenobject opgeven:
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'
Onderdrukking
Net als bij andere regels kun je typecompatibiliteitsdiagnostiek onderdrukken door een suppressie-attribuut toe te voegen aan het param blok van een scriptblok.
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleTypes', '')]
Je kunt de regel ook onderdrukken voor specifieke types:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleTypes',
'System.Management.Automation.Security.SystemPolicy')]
Je kunt het ook onderdrukken voor specifieke type leden:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleTypes',
'System.Management.Automation.LanguagePrimitives/ConvertTypeNameToPSTypeName')]
Parameters
Enable
Deze parameter bepaalt of ScriptAnalyzer de code controleert aan deze regel. Het accepteert een booleaanse waarde. Om deze regel te activeren, zet je deze parameter op $true. De standaardwaarde is $false.
TargetProfiles
Deze parameter specificeert de lijst van platformprofielen waarmee compatibiliteit moet worden gecontroleerd. Het accepteert een lijst van tekenreeksen. Elke waarde kan een platformnaam, een bestandsnaam of een absoluut pad naar een profielbestand zijn. De standaardwaarde is @().
ProfileDirPath
Deze parameter beheert de map die ScriptAnalyzer zoekt naar profielen op naam en gebruikt om het union-profiel te genereren. Het accepteert een string met een absoluut pad. De standaardlocatie is de compatibility_profiles map in de PSScriptAnalyzer-module.
IgnoreTypes
Deze parameter specificeert de volledige namen van types of typeversnellers om compatibiliteitscontroles uit te sluiten. Het accepteert een array van typenaamstrings. De standaardwaarde is @().