Поделиться через


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-ScriptAnalyzerSuppressedOnly возвращает объекты SuppressedRecord.