Строго говоря, вы ищете средство проверки семантики , учитывая, что ваш код синтаксически правильный .
Проблема в том, что, хотя код былформально правильно, он не делает то, что вы намеревались сделать.
PSScriptAnalyzer (PSSA) является линтером дляPowerShell , и он интегрирован в расширение PowerShell для Код Visual Studio .
. Он может решить вашу проблему, выдав следующее сообщение:
Вы имели в виду использование оператора перенаправления '>'?
Операторы сравнения в PowerShell: '-gt' (больше чем) или '-ge' (больше или равно).
Использование в Visual Studio Код:
Установить расширение PowerShell .
Один разПосле установки сценария, открытого для редактирования, вы увидите подчеркнутую часть > 0
, а при наведении на нее сообщение будет отображаться как всплывающая подсказка.
Вы можете просмотреть все сообщения для текущего файла в представлении «Проблемы» ( Ctrl-Shift-M или, через меню, View > Problems
), которое случайно, покажет вам, что PSSA обнаружил дополнительные потенциальные проблемы с вашим фрагментом кода.
Чтобы настроить, какие правила применять (о каких потенциальных проблемах следует предупреждать), используйте >PowerShell: Select PSScriptAnalyzer Rules
из палитры команд,
Обратите внимание, что PSSA также предлагает автоматическое (пере) форматирование кода PowerShell ( Alt-Shift-F или, через палитру команд, >Format Document
).
Автономное использование:
С вашим кодом вы увидите следующий вывод (получив сценарий с именем pg.ps1
):
RuleName Severity ScriptName Line Message
-------- -------- ---------- ---- -------
PSPossibleIncorrectUsageOfRedirecti Warning pg.ps1 1 Did you mean to use the redirection operator '>'? The
onOperator comparison operators in PowerShell are '-gt' (greater than)
or '-ge' (greater or equal).
PSPossibleIncorrectComparisonWithNu Warning pg.ps1 1 $null should be on the left side of equality comparisons.
ll
PSUseDeclaredVarsMoreThanAssignment Warning pg.ps1 2 The variable 'templID' is assigned but never used.
s
PSAvoidUsingWriteHost Warning pg.ps1 3 File 'pg.ps1' uses Write-Host. Avoid using Write-Host
because it might not work in all hosts, does not work when
there is no host, and (prior to PS 5.0) cannot be
suppressed, captured, or redirected. Instead, use
Write-Output, Write-Verbose, or Write-Information.