Bagikan melalui


Invoke-ScriptAnalyzer

Mengevaluasi skrip atau modul berdasarkan aturan praktik terbaik yang dipilih

Sintaks

Invoke-ScriptAnalyzer
      [-Path] <string>
      [-CustomRulePath <string[]>]
      [-RecurseCustomRulePath]
      [-IncludeDefaultRules]
      [-ExcludeRule <string[]>]
      [-IncludeRule <string[]>]
      [-Severity <string[]>]
      [-Recurse]
      [-SuppressedOnly]
      [-Fix]
      [-EnableExit]
      [-Settings <Object>]
      [-SaveDscDependency]
      [-ReportSummary]
      [-WhatIf]
      [-Confirm]
      [<CommonParameters>]
Invoke-ScriptAnalyzer
      [-Path] <string>
      -IncludeSuppressed
      [-CustomRulePath <string[]>]
      [-RecurseCustomRulePath]
      [-IncludeDefaultRules]
      [-ExcludeRule <string[]>]
      [-IncludeRule <string[]>]
      [-Severity <string[]>]
      [-Recurse]
      [-Fix]
      [-EnableExit]
      [-Settings <Object>]
      [-SaveDscDependency]
      [-ReportSummary]
      [-WhatIf]
      [-Confirm]
      [<CommonParameters>]
Invoke-ScriptAnalyzer
      [-ScriptDefinition] <string>
      -IncludeSuppressed
      [-CustomRulePath <string[]>]
      [-RecurseCustomRulePath]
      [-IncludeDefaultRules]
      [-ExcludeRule <string[]>]
      [-IncludeRule <string[]>]
      [-Severity <string[]>]
      [-Recurse]
      [-EnableExit]
      [-Settings <Object>]
      [-SaveDscDependency]
      [-ReportSummary]
      [-WhatIf]
      [-Confirm]
      [<CommonParameters>]
Invoke-ScriptAnalyzer
      [-ScriptDefinition] <string>
      [-CustomRulePath <string[]>]
      [-RecurseCustomRulePath]
      [-IncludeDefaultRules]
      [-ExcludeRule <string[]>]
      [-IncludeRule <string[]>]
      [-Severity <string[]>]
      [-Recurse]
      [-SuppressedOnly]
      [-EnableExit]
      [-Settings <Object>]
      [-SaveDscDependency]
      [-ReportSummary]
      [-WhatIf]
      [-Confirm]
      [<CommonParameters>]

Deskripsi

Invoke-ScriptAnalyzer mengevaluasi skrip atau file modul (.ps1, .psm1, dan .psd1 file) berdasarkan kumpulan aturan praktik terbaik dan mengembalikan objek yang mewakili pelanggaran aturan. Ini juga termasuk aturan khusus untuk menganalisis sumber daya DSC.

Invoke-ScriptAnalyzer dilengkapi dengan seperangkat aturan bawaan. Secara default, ia menggunakan semua aturan. Anda dapat menggunakan parameter IncludeRule dan ExcludeRule untuk memilih aturan yang Anda inginkan. Anda dapat menggunakan Get-ScriptAnalyzerRule cmdlet untuk memeriksa dan memilih aturan yang ingin Anda sertakan atau kecualikan dari evaluasi.

Anda juga dapat menggunakan aturan yang dikustomisasi yang Anda tulis di skrip PowerShell, atau mengompilasi dalam rakitan menggunakan C#. Aturan kustom juga dapat dipilih menggunakan parameter IncludeRule dan ExcludeRule .

Anda juga dapat menyertakan aturan dalam analisis, tetapi menekan output aturan tersebut untuk fungsi atau skrip yang dipilih. Fitur ini harus digunakan hanya jika perlu. Untuk mendapatkan aturan yang ditekan, jalankan Invoke-ScriptAnalyzer dengan parameter SuppressedOnly .

Untuk penggunaan dalam sistem CI, EnableExit keluar dari shell dengan kode keluar yang sama dengan jumlah rekaman kesalahan.

Contoh

CONTOH 1 - Menjalankan semua aturan Penganalisis Skrip pada skrip

Invoke-ScriptAnalyzer -Path C:\Scripts\Get-LogData.ps1

CONTOH 2 - Jalankan semua aturan Penganalisis Skrip pada semua file di direktori Modul

Contoh ini menjalankan semua aturan Script Analyzer pada semua .ps1 file dan .psm1 di direktori berbasis Modules pengguna Anda dan subdirektorinya.

Invoke-ScriptAnalyzer -Path $home\Documents\WindowsPowerShell\Modules -Recurse

CONTOH 3 - Menjalankan satu aturan pada modul

Contoh ini hanya menjalankan aturan PSAvoidUsingPositionalParameters pada file di PSDiagnostics folder modul. Anda dapat menggunakan perintah seperti ini untuk menemukan semua instans pelanggaran aturan tertentu.

Invoke-ScriptAnalyzer -Path C:\Windows\System32\WindowsPowerShell\v1.0\Modules\PSDiagnostics -IncludeRule PSAvoidUsingPositionalParameters

CONTOH 4 - Jalankan semua aturan kecuali dua pada modul Anda

Contoh ini menjalankan semua aturan kecuali untuk PSAvoidUsingCmdletAliases dan PSAvoidUsingInternalURLs pada .ps1 file dan .psm1 di MyModules direktori dan di subdirektorinya.

Invoke-ScriptAnalyzer -Path C:\ps-test\MyModule -Recurse -ExcludeRule PSAvoidUsingCmdletAliases, PSAvoidUsingInternalURLs

CONTOH 5 - Jalankan Penganalisis Skrip dengan aturan kustom

Contoh ini menjalankan Script Analyzer dengan Test-Script.ps1 aturan dan aturan standar di C:\CommunityAnalyzerRules jalur.

Invoke-ScriptAnalyzer -Path D:\test_scripts\Test-Script.ps1 -CustomRulePath C:\CommunityAnalyzerRules -IncludeDefaultRules

CONTOH 6 - Jalankan hanya aturan yang merupakan tingkat keparahan Kesalahan dan memiliki nama sumber PSDSC

$DSCError = Get-ScriptAnalyzerRule -Severity Error | Where SourceName -eq PSDSC
$Path = "$home\Documents\WindowsPowerShell\Modules\MyDSCModule"
Invoke-ScriptAnalyzerRule -Path $Path -IncludeRule $DSCError -Recurse

CONTOH 7 - Menyembunyikan pelanggaran aturan

Contoh ini menunjukkan cara menekan pelaporan pelanggaran aturan dalam fungsi dan cara menemukan pelanggaran aturan yang ditekan.

Contoh menggunakan SuppressMessageAttribute atribut untuk menekan aturan PSUseSingularNouns dan PSAvoidUsingCmdletAliases untuk Get-Widgets fungsi dalam Get-Widgets.ps1 skrip. Anda dapat menggunakan atribut ini untuk menekan aturan untuk modul, skrip, kelas, fungsi, parameter, atau baris.

Perintah pertama menjalankan Script Analyzer pada file skrip yang berisi fungsi . Output melaporkan pelanggaran aturan. Meskipun lebih banyak aturan dilanggar, aturan yang ditekan tidak dilaporkan.

function Get-Widgets
{
    [CmdletBinding()]
    [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseSingularNouns", "")]
    [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidUsingCmdletAliases", "", Justification="Resolution in progress.")]
    Param()

    dir $pshome
    ...
}

Invoke-ScriptAnalyzer -Path .\Get-Widgets.ps1

RuleName                            Severity     FileName   Line  Message
--------                            --------     --------   ----  -------
PSProvideCommentHelp                Information  ManageProf 14    The cmdlet 'Get-Widget' does not have a help comment.
                                                 iles.psm1

Invoke-ScriptAnalyzer -Path .\Get-Widgets.ps1 -SuppressedOnly

Rule Name                           Severity     File Name  Line  Justification
---------                           --------     ---------  ----  -------------
PSAvoidUsingCmdletAliases           Warning      ManageProf 21    Resolution in progress.
                                                 iles.psm1
PSUseSingularNouns                  Warning      ManageProf 14
                                                 iles.psm1

Perintah kedua menggunakan parameter SuppressedOnly untuk melaporkan pelanggaran aturan yang merupakan file skrip yang ditekan.

CONTOH 8 - Menganalisis file skrip menggunakan definisi profil

Dalam contoh ini, kami membuat profil Script Analyzer dan menyimpannya dalam ScriptAnalyzerProfile.txt file di direktori saat ini. Kami menjalankan Invoke-ScriptAnalyzer pada file modul BitLocker . Nilai parameter Profil adalah jalur ke profil Script Analyzer.

# In .\ScriptAnalyzerProfile.txt
@{
    Severity = @('Error', 'Warning')
    IncludeRules = 'PSAvoid*'
    ExcludeRules = '*WriteHost'
}

Invoke-ScriptAnalyzer -Path $pshome\Modules\BitLocker -Profile .\ScriptAnalyzerProfile.txt

Jika Anda menyertakan parameter yang bertentangan dalam Invoke-ScriptAnalyzer perintah, seperti -Severity Error, cmdlet menggunakan nilai profil dan mengabaikan parameter .

CONTOH 9 - Menganalisis skrip yang disimpan sebagai string

Contoh ini menggunakan parameter ScriptDefinition untuk menganalisis fungsi di baris perintah. String fungsi diapit dalam tanda kutip.

Invoke-ScriptAnalyzer -ScriptDefinition "function Get-Widgets {Write-Host 'Hello'}"

RuleName                            Severity     FileName   Line  Message
--------                            --------     --------   ----  -------
PSAvoidUsingWriteHost               Warning                 1     Script
                                                                  because
                                                                  there i
                                                                  suppres
                                                                  Write-O
PSUseSingularNouns                  Warning                 1     The cmd
                                                                  noun sh

Saat Anda menggunakan parameter ScriptDefinition , properti FileName dari objek DiagnosticRecord adalah $null.

Parameter

-Confirm

Meminta Anda mengonfirmasi sebelum menjalankan cmdlet.

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-CustomRulePath

Masukkan jalur ke file yang menentukan aturan atau direktori yang berisi file yang menentukan aturan. Karakter kartubebas didukung. Ketika CustomRulePath ditentukan, hanya aturan kustom yang ditemukan di jalur yang ditentukan yang digunakan untuk analisis. Jika Invoke-ScriptAnalyzer tidak dapat menemukan aturan di , aturan standar akan dijalankan tanpa pemberitahuan.

Untuk menambahkan aturan yang ditentukan dalam subdirektori jalur, gunakan parameter RecurseCustomRulePath . Untuk menyertakan aturan bawaan, tambahkan parameter IncludeDefaultRules .

Type:String[]
Aliases:CustomizedRulePath
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-EnableExit

Setelah menyelesaikan analisis, parameter ini keluar dari sesi PowerShell dan mengembalikan kode keluar yang sama dengan jumlah rekaman kesalahan. Ini dapat berguna dalam alur integrasi berkelanjutan (CI).

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ExcludeRule

Menghilangkan aturan yang ditentukan dari pengujian Script Analyzer. Karakter kartubebas didukung.

Masukkan daftar nama aturan yang dipisahkan koma, variabel yang berisi nama aturan, atau perintah yang mendapatkan nama aturan. Anda juga dapat menentukan daftar aturan yang dikecualikan dalam file profil Script Analyzer. Anda dapat mengecualikan aturan dan aturan standar dalam jalur aturan kustom.

Saat Anda mengecualikan aturan, aturan tidak berjalan pada salah satu file di jalur. Untuk mengecualikan aturan pada baris, parameter, fungsi, skrip, atau kelas tertentu, sesuaikan parameter Jalur atau tekan aturan. Untuk informasi tentang menekan aturan, lihat contohnya.

Jika aturan ditentukan dalam koleksi ExcludeRule dan IncludeRule , aturan dikecualikan.

Type:String[]
Position:Named
Default value:All rules are included.
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-Fix

Memperbaiki peringatan tertentu yang berisi perbaikan di DiagnosticRecord mereka.

Saat Anda menggunakan Perbaikan, Invoke-ScriptAnalyzer menerapkan perbaikan sebelum menjalankan analisis. Pastikan Anda memiliki cadangan file saat menggunakan parameter ini. Ini mencoba mempertahankan pengodean file tetapi masih ada beberapa kasus di mana pengodean dapat berubah.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-IncludeDefaultRules

Panggil aturan default bersama dengan aturan Kustom.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-IncludeRule

Hanya menjalankan aturan yang ditentukan dalam pengujian Script Analyzer. Secara default, PSScriptAnalyzer menjalankan semua aturan.

Masukkan daftar nama aturan yang dipisahkan koma, variabel yang berisi nama aturan, atau perintah yang mendapatkan nama aturan. Karakter kartubebas didukung. Anda juga dapat menentukan nama aturan dalam file profil Script Analyzer.

Saat Anda menggunakan parameter CustomizedRulePath , Anda dapat menggunakan parameter ini untuk menyertakan aturan dan aturan standar di jalur aturan kustom.

Jika aturan ditentukan dalam koleksi ExcludeRule dan IncludeRule , aturan dikecualikan.

Parameter Tingkat Keparahan lebih diutamakan daripada IncludeRule. Misalnya, jika Tingkat Keparahan adalah Error, Anda tidak dapat menggunakan IncludeRule untuk menyertakan Warning aturan.

Type:String[]
Position:Named
Default value:All rules are included.
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-IncludeSuppressed

Sertakan diagnostik yang ditekan dalam output.

Type:SwitchParameter
Position:Named
Default value:False
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Path

Menentukan jalur ke skrip atau modul yang akan dianalisis. Karakter kartubebas didukung.

Masukkan jalur ke skrip (.ps1) atau file modul (.psm1) atau ke direktori yang berisi skrip atau modul. Jika direktori berisi jenis file lain, file akan diabaikan.

Untuk menganalisis file yang tidak berada di direktori akar jalur yang ditentukan, gunakan karakter kartubebas (C:\Modules\MyModule\*) atau parameter Berulang .

Type:String
Aliases:PSPath
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:True

-Recurse

Menjalankan Script Analyzer pada file di direktori Jalur dan semua subdirektori secara rekursif.

Pengulangan hanya berlaku untuk nilai parameter Jalur. Untuk mencari CustomRulePath secara rekursif, gunakan parameter RecurseCustomRulePath .

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-RecurseCustomRulePath

Menambahkan aturan yang ditentukan dalam subdirektori lokasi CustomRulePath . Secara default, Invoke-ScriptAnalyzer hanya menggunakan aturan kustom yang ditentukan dalam file atau direktori yang ditentukan. Untuk menyertakan aturan bawaan, gunakan parameter IncludeDefaultRules .

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ReportSummary

Tulis ringkasan pelanggaran yang ditemukan kepada host.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SaveDscDependency

Mengatasi dependensi sumber daya DSC.

Ketika Invoke-ScriptAnalyzer dijalankan dengan parameter ini, ia mencari instans Import-DSCResource -ModuleName <somemodule>. Jika <somemodule> tidak dapat ditemukan dengan mencari $env:PSModulePath, Invoke-ScriptAnalyzer mengembalikan kesalahan penguraian. Kesalahan ini disebabkan oleh pengurai PowerShell tidak dapat menemukan simbol untuk <somemodule>.

Jika Invoke-ScriptAnalyzer menemukan modul di Galeri PowerShell, modul yang hilang akan diunduh ke jalur sementara. Jalur sementara kemudian ditambahkan ke $env:PSModulePath selama pemindaian. Lokasi sementara dapat ditemukan di $LOCALAPPDATA/PSScriptAnalyzer/TempModuleDir.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ScriptDefinition

Menjalankan analisis pada perintah, fungsi, atau ekspresi dalam string. Anda dapat menggunakan fitur ini untuk menganalisis pernyataan, ekspresi, dan fungsi, terlepas dari konteks skripnya.

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Settings

Jalur ke file yang berisi profil yang ditentukan pengguna atau objek hashtable yang berisi pengaturan untuk ScriptAnalyzer.

Invoke-ScriptAnalyzer Berjalan dengan parameter dan nilai yang ditentukan dalam file atau hashtable.

Jika jalur atau konten file atau hashtable tidak valid, jalur akan diabaikan. Parameter dan nilai dalam profil lebih diutamakan daripada parameter dan nilai yang sama yang ditentukan pada baris perintah.

File profil Script Analyzer adalah file teks yang berisi hashtable dengan satu atau beberapa kunci berikut:

  • CustomRulePath
  • ExcludeRules
  • IncludeDefaultRules
  • IncludeRules
  • RecurseCustomRulePath
  • Aturan
  • Tingkat keparahan

Kunci dan nilai dalam profil ditafsirkan seolah-olah itu adalah parameter standar dan nilai Invoke-ScriptAnalyzer, mirip dengan percikan. Untuk informasi selengkapnya, lihat about_Splatting.

Type:Object
Aliases:Profile
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Severity

Setelah menjalankan Script Analyzer dengan semua aturan, parameter ini memilih pelanggaran aturan dengan tingkat keparahan yang ditentukan.

Nilai yang valid adalah:

  • Kesalahan
  • Peringatan
  • Informasi.

Anda dapat menentukan satu atau lebih nilai keparahan.

Parameter memfilter pelanggaran aturan hanya setelah menjalankan semua aturan. Untuk memfilter aturan secara efisien, gunakan Get-ScriptAnalyzerRule untuk memilih aturan yang ingin Anda jalankan.

Parameter Tingkat Keparahan lebih diutamakan daripada IncludeRule. Misalnya, jika Tingkat Keparahan adalah Error, Anda tidak dapat menggunakan IncludeRule untuk menyertakan Warning aturan.

Type:String[]
Position:Named
Default value:All rule violations
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SuppressedOnly

Mengembalikan pelanggaran hanya untuk aturan yang ditekan.

Mengembalikan objek SuppressedRecord (Microsoft.Windows.PowerShell.ScriptAnalyzer.Generic.SuppressedRecord).

Untuk menekan aturan, gunakan SuppressMessageAttribute. Untuk bantuan, lihat contohnya.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WhatIf

Menunjukkan yang akan terjadi jika cmdlet dijalankan. Cmdlet tidak dijalankan.

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Input

None

Anda tidak dapat menyalurkan input ke cmdlet ini.

Output

Microsoft.Windows.PowerShell.ScriptAnalyzer.Generic.DiagnosticRecord

Secara default, Invoke-ScriptAnalyzer mengembalikan satu objek DiagnosticRecord untuk setiap pelanggaran aturan.

Microsoft.Windows.PowerShell.ScriptAnalyzer.Generic.SuppressedRecord

Jika Anda menggunakan parameter SuppressedOnly , Invoke-ScriptAnalyzer sebaliknya mengembalikan objek SuppressedRecord .