Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede PSScriptAnalyzer'ın çeşitli özellikleri ve bunların nasıl kullanılacağı açıklanmaktadır.
Ayrıştırıcı Hataları
Sürüm 1.18.0'dan başlayarak, PSScriptAnalyzer ayrıştırıcı hatalarını çıkış akışında tanılama kayıtları olarak yayar.
Invoke-ScriptAnalyzer -ScriptDefinition '"b" = "b"; function eliminate-file () { }'
RuleName Severity ScriptName Line Message
-------- -------- ---------- ---- -------
InvalidLeftHandSide ParseError 1 The assignment expression isn't
valid. The input to an
assignment operator must be an
object that's able to accept
assignments, such as a variable
or a property.
PSUseApprovedVerbs Warning 1 The cmdlet 'eliminate-file' uses an
unapproved verb.
RuleName, ayrıştırıcı hatasının ErrorId değerine ayarlanır.
ParseErrors'ı gizlemek için bunu Severity parametresine değer olarak eklemeyin.
$invokeScriptAnalyzerSplat = @{
ScriptDefinition = '"b" = "b"; function eliminate-file () { }'
Severity = 'Warning'
}
Invoke-ScriptAnalyzer @invokeScriptAnalyzerSplat
RuleName Severity ScriptName Line Message
-------- -------- ---------- ---- -------
PSUseApprovedVerbs Warning 1 The cmdlet 'eliminate-file' uses an
unapproved verb.
Bastırma Kuralları
Bir komut dosyasını, işlevi veya parametreyi ile süsleyerek bir kuralı gizleyebilirsiniz. NET'in SuppressMessageAttribute'unu kullanın. SuppressMessageAttribute oluşturucusu iki parametre alır: kategori ve denetim kimliği. categoryID parametresini gizlemek istediğiniz kuralın adına ayarlayın ve checkID parametresini null veya boş bir dize olarak ayarlayın. İsteğe bağlı olarak, iletiyi gizlemek için bir gerekçe içeren üçüncü bir adlandırılmış parametre ekleyebilirsiniz:
function SuppressMe()
{
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSProvideCommentHelp', '',
Justification='Just an example')]
param()
Write-Verbose -Message "I'm making a difference!"
}
Süslediğiniz komut dosyası, işlev veya parametre kapsamında tüm kural ihlalleri gizlenir.
Belirli bir parametredeki iletiyi gizlemek için CheckId parametresini SuppressMessageAttribute parametresinin adına ayarlayın:
function SuppressTwoVariables()
{
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSProvideDefaultParameterValue', 'b')]
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSProvideDefaultParameterValue', 'a')]
param([string]$a, [int]$b)
{
}
}
Kural gizlemeyi özniteliğin kapsamındaki işlevler veya sınıflarla sınırlamak için SuppressMessageAttribute'unScope özelliğini kullanın.
Özniteliğin kapsamındaki tüm işlevlerdeki ihlalleri gizlemek için İşlev değerini kullanın. Özniteliğin kapsamındaki tüm sınıflardaki ihlalleri gizlemek için Class değerini kullanın:
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSProvideCommentHelp', '', Scope='Function')]
param()
function InternalFunction
{
param()
Write-Verbose -Message "I am invincible!"
}
SuppressMessageAttribute'unTarget özelliğini düzenli ifade veya joker desenine ayarlayarak bir fonksiyon, parametre, sınıf, değişken veya nesnenin adına göre bastırmayı daha da kısıtlayabilirsiniz.
Örneğin, içinde PSAvoidUsingWriteHost kural ihlalini start-barstart-baz ve içinde ve değil start-foostart-bam:
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingWriteHost', '',
Scope='Function', Target='start-ba[rz]')]
param()
function start-foo {
write-host "start-foo"
}
function start-bar {
write-host "start-bar"
}
function start-baz {
write-host "start-baz"
}
function start-bam {
write-host "start-bam"
}
Tüm işlevlerdeki ihlalleri gizlemek için:
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingWriteHost', '',
Scope='Function', Target='*')]
Param()
'deki start-barihlalleri bastırmak için ve start-bazstart-bam ancak içinde start-foodeğil:
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingWriteHost', '',
Scope='Function', Target='start-b*')]
Param()
Uyarı
Ayrıştırıcı hataları SuppressMessageAttribute ile gizlenemez.
ScriptAnalyzer'da Ayarlar Desteği
Önem Derecesine göre dahil edilecek veya dışlanacak ScriptAnalyzer kurallarını açıklayan ayarlar oluşturabilirsiniz. Yapılandırmayı belirtmek için AyarlarInvoke-ScriptAnalyzer parametresini kullanın.
Settings parametresi, belirli bir ortam için özel bir yapılandırma oluşturmanıza olanak tanır.
ScriptAnalyzer, ayarlar dosyasını belirtmek için aşağıdaki modları destekler:
Yerleşik Ön Ayarlar
ScriptAnalyzer, betikleri analiz etmek için kullanılabilecek bir dizi yerleşik ön ayar sunar. Örneğin, modülünüzde PowerShell Galerisi kurallarını çalıştırmak istiyorsanız aşağıdaki komutu kullanın:
Invoke-ScriptAnalyzer -Path /path/to/module/ -Settings PSGallery -Recurse
Ayrıca, DSC ve CodeFormatting dahil olmak üzere diğer yerleşik hazır ayarları kullanabilirsiniz. Bu ön ayarlar, Ayarlar parametresi için sekme ile tamamlanabilir.
Açık
Aşağıdaki örnek, varsayılan kural kümesinden iki kuralı ve Hata ve Uyarı dışında önem derecesine sahip tüm kuralları dışlar.
# PSScriptAnalyzerSettings.psd1
@{
Severity=@('Error','Warning')
ExcludeRules=@('PSAvoidUsingCmdletAliases', 'PSAvoidUsingWriteHost')
}
Daha sonra bu ayarlar dosyasını şununla Invoke-ScriptAnalyzerçağırabilirsiniz:
Invoke-ScriptAnalyzer -Path MyScript.ps1 -Settings PSScriptAnalyzerSettings.psd1
Sonraki örnek, tüm varsayılan kurallar yerine yürütülecek birkaç kural seçer.
# PSScriptAnalyzerSettings.psd1
@{
IncludeRules=@('PSAvoidUsingPlainTextForPassword',
'PSAvoidUsingConvertToSecureStringWithPlainText')
}
Daha sonra bu ayarlar dosyasını çağırabilirsiniz:
Invoke-ScriptAnalyzer -Path MyScript.ps1 -Settings PSScriptAnalyzerSettings.psd1
Dolaylı
Proje kökünüze adlı PSScriptAnalyzerSettings.psd1 bir ayarlar dosyası yerleştirirseniz, proje kökünü Path parametresi olarak geçirdiğinizde PSScriptAnalyzer bunu bulur.
Invoke-ScriptAnalyzer -Path "C:\path\to\project" -Recurse
Ayarların açıkça sağlanması, bu örtük moddan daha önceliklidir. Örnek ayarlar dosyalarını PSScriptAnalyzerSettings modülünün klasöründe bulabilirsiniz.
PowerShell sürüm uyumluluğunu kontrol edin
PSScriptAnalyzer , PowerShell betiklerini diğer PowerShell sürümleri ve ortamlarıyla uyumsuzluklara karşı denetleyebilir. PSScriptAnalyzer uyumluluk sorunlarını denetleyen dört kural içerir:
- PSUseCompatibleCmdlets , bir betikte kullanılan cmdlet'lerin diğer PowerShell ortamlarında kullanılabilir olup olmadığını denetler
- PSUseCompatibleCommands , bir betikte kullanılan komutların diğer PowerShell ortamlarında kullanılabilir olup olmadığını denetler
- PSUseCompatibleSyntax , bir scriptte kullanılan bir sözdiziminin PowerShell'in diğer sürümleriyle uyumlu olup olmadığını kontrol eder
- PSUseCompatibleType , .NET türlerinin ve statik yöntemlerin veya özelliklerin diğer PowerShell ortamlarında kullanılabilir olup olmadığını denetler
Bu kuralların nasıl kullanılacağı hakkında daha fazla bilgi için PowerShell Ekibi blogunda PowerShell sürüm uyumluluğunu denetlemek için PSScriptAnalyzer'ı kullanma bölümüne bakın.
Özel kurallar
Ayarlar dosyasında özel kurallara bir veya daha fazla yol sağlamak mümkündür. Bu yolların, modül bildirimini örtük olarak kullanan bir modülün klasörüne veya modülün betik dosyasına (.psm1) işaret etmesi önemlidir. Modülün, Export-ModuleMember tarafından kullanılabilmesi için özel kural işlevlerini kullanarak dışarı aktarması gerekir.
Bu örnekte, CustomRulePath özelliği iki farklı modüle işaret eder. Her iki modül de kural işlevlerini Measure fiiliyle dışarı aktarır, bu nedenle Measure-*IncludeRules özelliği için kullanılır.
@{
CustomRulePath = @(
'.\output\RequiredModules\DscResource.AnalyzerRules'
'.\tests\QA\AnalyzerRules\SqlServerDsc.AnalyzerRules.psm1'
)
IncludeRules = @(
'Measure-*'
)
}
IncludeRules özelliğinde kuralları listeleyerek de varsayılan kurallar ekleyebilirsiniz. Varsayılan kuralları eklerken, IncludeDefaultRules özelliğini olarak $trueayarlamanız önemlidir; aksi takdirde varsayılan kurallar kullanılır.
@{
CustomRulePath = @(
'.\output\RequiredModules\DscResource.AnalyzerRules'
'.\tests\QA\AnalyzerRules\SqlServerDsc.AnalyzerRules.psm1'
)
IncludeDefaultRules = $true
IncludeRules = @(
# Default rules
'PSAvoidDefaultValueForMandatoryParameter'
'PSAvoidDefaultValueSwitchParameter'
# Custom rules
'Measure-*'
)
}
Visual Studio Code'da özel kuralların kullanımı (VS Code)
Ayrıca VS Code içindeki ayarlar dosyasında bulunan özel kuralları da kullanabilirsiniz. Aşağıdaki içeriklerle bir VS Code çalışma alanı ayarları dosyası (.vscode/settings.json) ekleyin.
{
"powershell.scriptAnalysis.settingsPath": ".vscode/analyzersettings.psd1",
"powershell.scriptAnalysis.enable": true,
}
.NET kitaplığı olarak ScriptAnalyzer
ScriptAnalyzer'ın altyapısını ve işlevselliğini doğrudan kitaplık olarak kullanabilirsiniz.
İşte genel arayüzler:
using Microsoft.Windows.PowerShell.ScriptAnalyzer;
public void Initialize(System.Management.Automation.Runspaces.Runspace runspace,
Microsoft.Windows.PowerShell.ScriptAnalyzer.IOutputWriter outputWriter,
[string[] customizedRulePath = null],
[string[] includeRuleNames = null],
[string[] excludeRuleNames = null],
[string[] severity = null],
[bool suppressedOnly = false],
[string profile = null])
public System.Collections.Generic.IEnumerable<DiagnosticRecord> AnalyzePath(string path,
[bool searchRecursively = false])
public System.Collections.Generic.IEnumerable<IRule> GetRule(string[] moduleNames,
string[] ruleNames)
İhlal Düzeltme
Düzeltme anahtarını kullanarak ihlal yaratan içeriği önerilen bir alternatifle otomatik olarak değiştirebilirsiniz. Ayrıca, Invoke-ScriptAnalyzer uyguladığından, hangi düzeltmelerin uygulanacağını bulmak için WhatIf veya Confirm kullanabilirsiniz. Düzeltmeler uygularken kaynak kontrolünü kullanmalısınız çünkü AvoidUsingPlainTextForPassword gibi bazı değişiklikler, otomatik olarak yapılamayan başka script değişiklikleri gerektirebilir. İlk kodlama otomatik olarak öneriler uyguladığınızda her zaman korunamaz.
Dosya kodlamasını kontrol etmelisiniz, scriptleriniz belirli bir kodlamaya bağlıdır.
Hata kaydının SuggestedCorrections özelliği, VS Code gibi editörlerde hızlı düzeltme senaryolarını mümkün kılar. Aşağıdaki kurallar için geçerli SuggestedCorrection sağlıyoruz:
- Takma Addan Kaçının
- Parola İçin Düz Metin Kullanmaktan Kaçının
- YanıltıcıBacktick
- MissingModuleManifestField
- UseToExportFieldsInManifest
PowerShell