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#을 사용하여 어셈블리에서 컴파일할 수도 있습니다. IncludeRule 및 ExcludeRule 매개 변수를 사용하여 사용자 지정 규칙을 선택할 수도 있습니다.
분석에 규칙을 포함할 수도 있지만 선택한 함수 또는 스크립트에 대해 해당 규칙의 출력을 표시하지 않을 수도 있습니다. 이 기능은 필요한 경우에만 사용해야 합니다. 억제된 규칙을 얻으려면 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개를 제외한 모든 규칙 실행
이 예제에서는 PSAvoidUsingCmdletAliases 및 PSAvoidUsingInternalURLs.ps1
MyModules
디렉터리 및 하위 디렉터리의 .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
함수에 대한 PSUseSingularNouns 및 PSAvoidUsingCmdletAliases 규칙을 표시하지 않습니다.
이 특성을 사용하여 모듈, 스크립트, 클래스, 함수, 매개 변수 또는 줄에 대한 규칙을 표시하지 않을 수 있습니다.
첫 번째 명령은 함수가 포함된 스크립트 파일에서 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 매개 변수를 조정하거나 규칙을 표시하지 않습니다. 규칙을 표시하지 않는 방법에 대한 자세한 내용은 예제를 참조하세요.
ExcludeRule 및 IncludeRule 컬렉션 모두에서 규칙이 지정되면 규칙이 제외됩니다.
형식: | 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 매개 변수를 사용하는 경우 이 매개 변수를 사용하여 사용자 지정 규칙 경로에 표준 규칙 및 규칙을 포함할 수 있습니다.
ExcludeRule 및 IncludeRule 컬렉션 모두에서 규칙이 지정되면 규칙이 제외됩니다.
심각도 매개 변수는 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 개체를 반환합니다.
관련 링크
PowerShell