다음을 통해 공유


Invoke-ScriptAnalyzer

선택한 모범 사례 규칙에 따라 스크립트 또는 모듈을 평가합니다.

구문

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>]

Description

Invoke-ScriptAnalyzer 모범 사례 규칙의 컬렉션을 기반으로 스크립트 또는 모듈 파일(.ps1, .psm1.psd1 파일)을 평가하고 규칙 위반을 나타내는 개체를 반환합니다. DSC 리소스를 분석하는 특수 규칙도 포함되어 있습니다.

Invoke-ScriptAnalyzer 기본 제공 규칙 집합과 함께 제공됩니다. 기본적으로 모든 규칙을 사용합니다. IncludeRule 사용하고 ExcludeRule 매개 변수를 원하는 규칙을 선택할 수 있습니다. Get-ScriptAnalyzerRule cmdlet을 사용하여 평가에서 포함하거나 제외하려는 규칙을 검사하고 선택할 수 있습니다.

PowerShell 스크립트에서 작성하는 사용자 지정 규칙을 사용하거나 C#을 사용하여 어셈블리에서 컴파일할 수도 있습니다. IncludeRuleExcludeRule 매개 변수를 사용하여 사용자 지정 규칙을 선택할 수도 있습니다.

분석에 규칙을 포함할 수도 있지만 선택한 함수 또는 스크립트에 대해 해당 규칙의 출력을 표시하지 않을 수도 있습니다. 이 기능은 필요한 경우에만 사용해야 합니다. 억제된 규칙을 얻으려면 SuppressedOnly 매개 변수를 사용하여 Invoke-ScriptAnalyzer 실행합니다.

CI 시스템에서 사용하는 경우 EnableExit 오류 레코드 수와 동일한 종료 코드로 셸을 종료합니다.

예제

예제 1 - 스크립트에서 모든 스크립트 분석기 규칙 실행

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

예제 2 - 모듈 디렉터리의 모든 파일에 대한 모든 스크립트 분석기 규칙 실행

이 예제에서는 사용자 기반 Modules 디렉터리 및 해당 하위 디렉터리의 모든 .ps1.psm1 파일에 대해 모든 Script Analyzer 규칙을 실행합니다.

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

예제 3 - 모듈에서 단일 규칙 실행

이 예제에서는 PSDiagnostics 모듈 폴더의 파일에 PSAvoidUsingPositionalParameters 규칙만 실행합니다. 이와 같은 명령을 사용하여 특정 규칙 위반의 모든 인스턴스를 찾을 수 있습니다.

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

예제 4 - 모듈에서 2개를 제외한 모든 규칙 실행

이 예제에서는 PSAvoidUsingCmdletAliasesPSAvoidUsingInternalURLs.ps1MyModules 디렉터리 및 하위 디렉터리의 .psm1 파일을 제외한 모든 규칙을 실행합니다.

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

예제 5 - 사용자 지정 규칙을 사용하여 스크립트 분석기 실행

이 예제에서는 C:\CommunityAnalyzerRules 경로의 표준 규칙 및 규칙을 사용하여 Test-Script.ps1 Script Analyzer를 실행합니다.

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

예제 6 - 오류 심각도이고 PSDSC 원본 이름이 있는 규칙만 실행합니다.

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

예제 7 - 규칙 위반 표시 안 함

이 예제에서는 함수에서 규칙 위반 보고를 표시하지 않는 방법과 표시되지 않는 규칙 위반을 검색하는 방법을 보여 줍니다.

이 예제에서는 SuppressMessageAttribute 특성을 사용하여 Get-Widgets.ps1 스크립트의 Get-Widgets 함수에 대한 PSUseSingularNounsPSAvoidUsingCmdletAliases 규칙을 표시하지 않습니다. 이 특성을 사용하여 모듈, 스크립트, 클래스, 함수, 매개 변수 또는 줄에 대한 규칙을 표시하지 않을 수 있습니다.

첫 번째 명령은 함수가 포함된 스크립트 파일에서 Script Analyzer를 실행합니다. 출력은 규칙 위반을 보고합니다. 더 많은 규칙을 위반하더라도 표시되지 않는 규칙은 보고되지 않습니다.

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

두 번째 명령은 SuppressedOnly 매개 변수를 사용하여 비표시된 스크립트 파일인 규칙 위반을 보고합니다.

예제 8 - 프로필 정의를 사용하여 스크립트 파일 분석

이 예제에서는 Script Analyzer 프로필을 만들고 현재 디렉터리의 ScriptAnalyzerProfile.txt 파일에 저장합니다. BitLocker 모듈 파일에서 Invoke-ScriptAnalyzer 실행합니다. Profile 매개 변수의 값은 Script Analyzer 프로필의 경로입니다.

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

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

-Severity Error같은 Invoke-ScriptAnalyzer 명령에 충돌하는 매개 변수를 포함하는 경우 cmdlet은 프로필 값을 사용하고 매개 변수를 무시합니다.

예제 9 - 문자열로 저장된 스크립트 분석

이 예제에서는 ScriptDefinition 매개 변수를 사용하여 명령줄에서 함수를 분석합니다. 함수 문자열은 따옴표로 묶입니다.

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

ScriptDefinition 매개 변수를 사용하면 DiagnosticRecord 개체의 FileName 속성이 $null.

매개 변수

-Confirm

cmdlet을 실행하기 전에 확인 메시지를 표시합니다.

형식:SwitchParameter
별칭:cf
Position:Named
Default value:False
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-CustomRulePath

규칙을 정의하는 파일의 경로 또는 규칙을 정의하는 파일이 포함된 디렉터리를 입력합니다. 와일드카드 문자가 지원됩니다. CustomRulePath 지정하면 지정된 경로에 있는 사용자 지정 규칙만 분석에 사용됩니다. Invoke-ScriptAnalyzer 규칙을 찾을 수 없는 경우 예고 없이 표준 규칙을 실행합니다.

경로의 하위 디렉터리에 정의된 규칙을 추가하려면 RecurseCustomRulePath 매개 변수를 사용합니다. 기본 제공 규칙을 포함하려면 IncludeDefaultRules 매개 변수를 추가합니다.

형식:String[]
별칭:CustomizedRulePath
Position:Named
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:True

-EnableExit

분석이 완료되면 이 매개 변수는 PowerShell 세션을 종료하고 오류 레코드 수와 동일한 종료 코드를 반환합니다. CI(연속 통합) 파이프라인에서 유용할 수 있습니다.

형식:SwitchParameter
Position:Named
Default value:False
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-ExcludeRule

스크립트 분석기 테스트에서 지정된 규칙을 생략합니다. 와일드카드 문자가 지원됩니다.

규칙 이름의 쉼표로 구분된 목록, 규칙 이름을 포함하는 변수 또는 규칙 이름을 가져오는 명령을 입력합니다. 스크립트 분석기 프로필 파일에서 제외된 규칙 목록을 지정할 수도 있습니다. 사용자 지정 규칙 경로에서 표준 규칙 및 규칙을 제외할 수 있습니다.

규칙을 제외하면 경로의 파일에서 규칙이 실행되지 않습니다. 특정 줄, 매개 변수, 함수, 스크립트 또는 클래스에서 규칙을 제외하려면 Path 매개 변수를 조정하거나 규칙을 표시하지 않습니다. 규칙을 표시하지 않는 방법에 대한 자세한 내용은 예제를 참조하세요.

ExcludeRuleIncludeRule 컬렉션 모두에서 규칙이 지정되면 규칙이 제외됩니다.

형식:String[]
Position:Named
Default value:All rules are included.
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:True

-Fix

DiagnosticRecord수정 사항이 포함된 특정 경고를 수정합니다.

수정사용하면 Invoke-ScriptAnalyzer 분석을 실행하기 전에 수정 사항을 적용합니다. 이 매개 변수를 사용할 때 파일 백업이 있는지 확인합니다. 파일 인코딩을 유지하려고 하지만 인코딩이 변경될 수 있는 경우도 있습니다.

형식:SwitchParameter
Position:Named
Default value:False
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-IncludeDefaultRules

사용자 지정 규칙과 함께 기본 규칙을 호출합니다.

형식:SwitchParameter
Position:Named
Default value:False
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-IncludeRule

스크립트 분석기 테스트에서 지정된 규칙만 실행합니다. 기본적으로 PSScriptAnalyzer는 모든 규칙을 실행합니다.

규칙 이름의 쉼표로 구분된 목록, 규칙 이름을 포함하는 변수 또는 규칙 이름을 가져오는 명령을 입력합니다. 와일드카드 문자가 지원됩니다. 스크립트 분석기 프로필 파일에서 규칙 이름을 지정할 수도 있습니다.

CustomizedRulePath 매개 변수를 사용하는 경우 이 매개 변수를 사용하여 사용자 지정 규칙 경로에 표준 규칙 및 규칙을 포함할 수 있습니다.

ExcludeRuleIncludeRule 컬렉션 모두에서 규칙이 지정되면 규칙이 제외됩니다.

심각도 매개 변수는 IncludeRule 우선합니다. 예를 들어 심각도Error경우 IncludeRule 사용하여 Warning 규칙을 포함할 수 없습니다.

형식:String[]
Position:Named
Default value:All rules are included.
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:True

-IncludeSuppressed

출력에 억제된 진단을 포함합니다.

형식:SwitchParameter
Position:Named
Default value:False
필수:True
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-Path

분석할 스크립트 또는 모듈의 경로를 지정합니다. 와일드카드 문자가 지원됩니다.

스크립트(.ps1) 또는 모듈 파일(.psm1) 또는 스크립트 또는 모듈이 포함된 디렉터리의 경로를 입력합니다. 디렉터리에 다른 형식의 파일이 포함되어 있으면 무시됩니다.

지정된 경로의 루트 디렉터리에 없는 파일을 분석하려면 와일드카드 문자(C:\Modules\MyModule\*) 또는 Recurse 매개 변수를 사용합니다.

형식:String
별칭:PSPath
Position:0
Default value:None
필수:True
파이프라인 입력 허용:True
와일드카드 문자 허용:True

-Recurse

Path 디렉터리의 파일 및 모든 하위 디렉터리에서 스크립트 분석기를 재귀적으로 실행합니다.

재귀는 Path 매개 변수 값에만 적용됩니다. CustomRulePath 재귀적으로 검색하려면 RecurseCustomRulePath 매개 변수를 사용합니다.

형식:SwitchParameter
Position:Named
Default value:False
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-RecurseCustomRulePath

CustomRulePath 위치의 하위 디렉터리에 정의된 규칙을 추가합니다. 기본적으로 Invoke-ScriptAnalyzer 지정된 파일 또는 디렉터리에 정의된 사용자 지정 규칙만 사용합니다. 기본 제공 규칙을 포함하려면 IncludeDefaultRules 매개 변수를 사용합니다.

형식:SwitchParameter
Position:Named
Default value:False
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-ReportSummary

호스트에 발견된 위반에 대한 요약을 작성합니다.

형식:SwitchParameter
Position:Named
Default value:False
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-SaveDscDependency

DSC 리소스 종속성을 해결합니다.

이 매개 변수를 사용하여 Invoke-ScriptAnalyzer 실행되면 Import-DSCResource -ModuleName <somemodule>인스턴스를 찾습니다. $env:PSModulePath검색하여 <somemodule> 찾을 수 없는 경우 Invoke-ScriptAnalyzer 구문 분석 오류를 반환합니다. 이 오류는 PowerShell 파서가 <somemodule>기호를 찾을 수 없기 때문에 발생합니다.

Invoke-ScriptAnalyzer PowerShell 갤러리에서 모듈을 찾으면 누락된 모듈을 임시 경로로 다운로드합니다. 그런 다음 검사 기간 동안 임시 경로가 $env:PSModulePath 추가됩니다. 임시 위치는 $LOCALAPPDATA/PSScriptAnalyzer/TempModuleDir찾을 수 있습니다.

형식:SwitchParameter
Position:Named
Default value:False
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-ScriptDefinition

문자열의 명령, 함수 또는 식에 대한 분석을 실행합니다. 이 기능을 사용하여 스크립트 컨텍스트와 관계없이 문, 식 및 함수를 분석할 수 있습니다.

형식:String
Position:0
Default value:None
필수:True
파이프라인 입력 허용:True
와일드카드 문자 허용:False

-Settings

사용자 정의 프로필 또는 ScriptAnalyzer에 대한 설정을 포함하는 해시 테이블 개체를 포함하는 파일의 경로입니다.

파일 또는 해시 테이블에서 지정된 매개 변수 및 값을 사용하여 Invoke-ScriptAnalyzer 실행합니다.

파일 또는 해시 테이블의 경로나 내용이 유효하지 않으면 무시됩니다. 프로필의 매개 변수와 값이 명령줄에 지정된 동일한 매개 변수 및 값보다 우선합니다.

Script Analyzer 프로필 파일은 다음 키 중 하나 이상이 포함된 해시 테이블을 포함하는 텍스트 파일입니다.

  • CustomRulePath
  • ExcludeRules
  • IncludeDefaultRules
  • IncludeRules
  • RecurseCustomRulePath
  • 규칙
  • 심각도

프로필의 키와 값은 스플래팅과 유사하게 표준 매개 변수 및 Invoke-ScriptAnalyzer값인 것처럼 해석됩니다. 자세한 내용은 about_Splatting참조하세요.

형식:Object
별칭:Profile
Position:Named
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-Severity

모든 규칙으로 Script Analyzer를 실행한 후 이 매개 변수는 지정된 심각도를 사용하여 규칙 위반을 선택합니다.

유효한 값은 다음과 같습니다.

  • 오류
  • 경고
  • 정보.

하나 이상의 광석 심각도 값을 지정할 수 있습니다.

매개 변수는 모든 규칙을 실행한 후에만 규칙 위반을 필터링합니다. 규칙을 효율적으로 필터링하려면 Get-ScriptAnalyzerRule 사용하여 실행하려는 규칙을 선택합니다.

심각도 매개 변수는 IncludeRule 우선합니다. 예를 들어 심각도Error경우 IncludeRule 사용하여 Warning 규칙을 포함할 수 없습니다.

형식:String[]
Position:Named
Default value:All rule violations
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-SuppressedOnly

표시되지 않는 규칙에 대해서만 위반을 반환합니다.

SuppressedRecord 개체(Microsoft.Windows.PowerShell.ScriptAnalyzer.Generic.SuppressedRecord)를 반환합니다.

규칙을 표시하지 않으면 SuppressMessageAttribute사용합니다. 도움말은 예제를 참조하세요.

형식:SwitchParameter
Position:Named
Default value:False
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-WhatIf

cmdlet이 실행되면 어떻게 되는지 보여 주세요. cmdlet이 실행되지 않습니다.

형식:SwitchParameter
별칭:wi
Position:Named
Default value:False
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

입력

None

이 cmdlet에 입력을 파이프할 수 없습니다.

출력

Microsoft.Windows.PowerShell.ScriptAnalyzer.Generic.DiagnosticRecord

기본적으로 Invoke-ScriptAnalyzer 각 규칙 위반에 대해 하나의 DiagnosticRecord 개체를 반환합니다.

Microsoft.Windows.PowerShell.ScriptAnalyzer.Generic.SuppressedRecord

SuppressedOnly 매개 변수를 사용하는 경우 Invoke-ScriptAnalyzer 대신 SuppressedRecord 개체를 반환합니다.