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>]
Описание
Invoke-ScriptAnalyzer
оценивает скрипты или файлы модулей (.ps1
, .psm1
и .psd1
файлы) на основе коллекции правил рекомендаций и возвращает объекты, представляющие нарушения правил. Он также включает специальные правила для анализа ресурсов DSC.
Invoke-ScriptAnalyzer
поставляется с набором встроенных правил. По умолчанию используются все правила. Для выбора нужных правил можно использовать параметры IncludeRule и ExcludeRule . С помощью командлета Get-ScriptAnalyzerRule
можно проверить и выбрать правила, которые нужно включить или исключить из оценки.
Вы также можете использовать настраиваемые правила, которые вы пишете в сценариях PowerShell, или компилировать в сборках с помощью C#. Настраиваемые правила также можно выбрать с помощью параметров IncludeRule и ExcludeRule .
Вы также можете включить правило в анализ, но отключить выходные данные этого правила для выбранных функций или скриптов. Эту функцию следует использовать только при необходимости. Чтобы получить правила, которые были подавлены, выполните команду Invoke-ScriptAnalyzer
с параметром SuppressedOnly .
Для использования в системах CI EnableExit завершает оболочку с кодом выхода, равным количеству записей об ошибках.
Примеры
ПРИМЕР 1. Выполнение всех правил анализатора скрипта для скрипта
Invoke-ScriptAnalyzer -Path C:\Scripts\Get-LogData.ps1
ПРИМЕР 2. Выполнение всех правил анализатора скриптов для всех файлов в каталоге Modules
В этом примере выполняются все правила анализатора скриптов для всех .ps1
файлов и .psm1
в пользовательском Modules
каталоге и его подкаталогах.
Invoke-ScriptAnalyzer -Path $home\Documents\WindowsPowerShell\Modules -Recurse
ПРИМЕР 3. Выполнение одного правила в модуле
В этом примере выполняется только правило PSAvoidUsingPositionalParameters для файлов в папке PSDiagnostics
модуля. Для поиска всех экземпляров нарушения определенного правила можно использовать следующую команду.
Invoke-ScriptAnalyzer -Path C:\Windows\System32\WindowsPowerShell\v1.0\Modules\PSDiagnostics -IncludeRule PSAvoidUsingPositionalParameters
ПРИМЕР 4. Выполнение всех правил, кроме двух, в модулях
В этом примере выполняются все правила, кроме PSAvoidUsingCmdletAliases и PSAvoidUsingInternalURLs.ps1
для файлов и .psm1
в каталоге MyModules
и в его подкаталогах.
Invoke-ScriptAnalyzer -Path C:\ps-test\MyModule -Recurse -ExcludeRule PSAvoidUsingCmdletAliases, PSAvoidUsingInternalURLs
ПРИМЕР 5. Запуск анализатора скриптов с настраиваемыми правилами
В этом примере выполняется анализатор скриптов Test-Script.ps1
с стандартными правилами и правилами в C:\CommunityAnalyzerRules
пути.
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
для подавления правил PSUseSingularNouns и PSAvoidUsingCmdletAliases для Get-Widgets
функции в скрипте Get-Widgets.ps1
.
Этот атрибут можно использовать для подавления правила для модуля, скрипта, класса, функции, параметра или строки.
Первая команда запускает анализатор скриптов для файла скрипта, содержащего функцию . Выходные данные сообщают о нарушении правила. Несмотря на то, что нарушается больше правил, ни один из подавляемых правил не сообщается.
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. Анализ файлов скриптов с помощью определения профиля
В этом примере мы создадим профиль анализатора скриптов и сохраним ScriptAnalyzerProfile.txt
его в файле в текущем каталоге. Мы запускаем Invoke-ScriptAnalyzer
файлы модуля BitLocker . Значение параметра Profile — это путь к профилю анализатора скриптов.
# In .\ScriptAnalyzerProfile.txt
@{
Severity = @('Error', 'Warning')
IncludeRules = 'PSAvoid*'
ExcludeRules = '*WriteHost'
}
Invoke-ScriptAnalyzer -Path $pshome\Modules\BitLocker -Profile .\ScriptAnalyzerProfile.txt
Если в Invoke-ScriptAnalyzer
команду включен конфликтующий параметр, например -Severity Error
, командлет использует значение профиля и игнорирует параметр .
ПРИМЕР 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 свойство FileName объекта DiagnosticRecord имеет значение $null
.
Параметры
-Confirm
Запрос подтверждения перед выполнением командлета.
Тип: | SwitchParameter |
Aliases: | cf |
Position: | Named |
Default value: | False |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-CustomRulePath
Введите путь к файлу, определяющему правила, или каталог, содержащий файлы, определяющие правила.
Поддерживаются подстановочные знаки. Если указан параметр CustomRulePath , для анализа используются только пользовательские правила, найденные в указанных путях. Если Invoke-ScriptAnalyzer
не удается найти правила в , он выполняет стандартные правила без предварительного уведомления.
Чтобы добавить правила, определенные в подкаталогах пути, используйте параметр RecurseCustomRulePath . Чтобы включить встроенные правила, добавьте параметр IncludeDefaultRules .
Тип: | String[] |
Aliases: | 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 выполняет все правила.
Введите разделенный запятыми список имен правил, переменную, содержащую имена правил, или команду, которая получает имена правил. Поддерживаются подстановочные знаки. Имена правил также можно указать в файле профиля анализатора скриптов.
При использовании параметра CustomedRulePath этот параметр можно использовать для включения стандартных правил и правил в пути настраиваемых правил.
Если правило указано в коллекциях ExcludeRule и IncludeRule , оно исключается.
Параметр Severity имеет приоритет над 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 |
Aliases: | PSPath |
Position: | 0 |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | True |
Принять подстановочные знаки: | True |
-Recurse
Выполняет анализатор скриптов для файлов в каталоге Path и во всех подкаталогах рекурсивно.
Recurse применяется только к значению параметра 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>
. Если <somemodule>
не удается найти с помощью поиска $env:PSModulePath
, 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
с параметрами и значениями, указанными в файле или хэш-таблицы.
Если недопустимый путь или содержимое файла или хэш-схемы, он игнорируется. Параметры и значения в профиле имеют приоритет над теми же параметрами и значениями, указанными в командной строке.
Файл профиля анализатора скриптов — это текстовый файл, содержащий хэш-таблицу с одним или несколькими из следующих ключей:
- CustomRulePath
- ExcludeRules
- IncludeDefaultRules
- IncludeRules
- RecurseCustomRulePath
- Правила
- Статус
Ключи и значения в профиле интерпретируются так, как если бы они были стандартными параметрами и значениями Invoke-ScriptAnalyzer
, аналогично сплаттингу. Дополнительные сведения см. в разделе about_Splatting.
Тип: | Object |
Aliases: | Profile |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-Severity
После запуска анализатора скриптов со всеми правилами этот параметр выбирает нарушения правил с указанной серьезностью.
Допустимые значения:
- Ошибка
- Предупреждение
- Сведения.
Можно указать одно или несколько значений серьезности.
Параметр фильтрует нарушения правил только после выполнения всех правил. Чтобы эффективно фильтровать правила, используйте Get-ScriptAnalyzerRule
для выбора правил, которые требуется выполнить.
Параметр Severity имеет приоритет над 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
Показывает, что произойдет при запуске командлета. Командлет не выполняется.
Тип: | SwitchParameter |
Aliases: | wi |
Position: | Named |
Default value: | False |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
Входные данные
None
В этот командлет нельзя передать входные данные.
Выходные данные
Microsoft.Windows.PowerShell.ScriptAnalyzer.Generic.DiagnosticRecord
По умолчанию Invoke-ScriptAnalyzer
возвращает один объект DiagnosticRecord для каждого нарушения правила.
Microsoft.Windows.PowerShell.ScriptAnalyzer.Generic.SuppressedRecord
При использовании параметра Invoke-ScriptAnalyzer
SuppressedOnly возвращает объекты SuppressedRecord.
Связанные ссылки
PowerShell