我正在编写一个控制台应用程序来验证PowerShell脚本的语法。 我的要求是在不执行脚本的情况下验证PowerShell脚本。我找到了下面这个PowerShell命令,可以在不执行脚本的情况下进行语法检查。
Get-Command -syntax 'D:\powershell\deleteDemoFile.ps1'
然而,我发现它并没有进行完整的语法检查。例如,在PowerShell中使用变量而不声明,或者在(Function、if、ForEach等)中出现拼写错误等此类语法错误不会被以上命令捕获。
以下是PowerShell脚本文件(.\deleteDemoFile.ps1)的示例代码。请注意,在下面的代码中,(if、Function)的拼写有误,并且使用了未声明的'$log_dir'变量。
当我运行PowerShell命令Get-Command -syntax 'D:\powershell\deleteDemoFile.ps1'
时,该命令不会抛出任何语法错误。
Write-Host "Hello, World!"
ifTypo(-not (test-path -path $log_dir )) {
new-item -itemtype directory -path $log_dir
}
FunctionTypo log {
Param ([string]$log_string)
write-host $log_string
add-content $log_file -value $log_string
}
log("Deleting a demo txt file")
# PowerShell -WhatIf safety parameter
Clear-Host
Get-Childitem D:\powershell\SomeFile\demo.txt -Recurse | Remove-Item
我在想:
- 这个PowerShell命令在进行语法检查时的效率如何?
- 它只验证PowerShell cmdlets、函数和别名的语法吗?
- 此命令与哪个版本的PowerShell脚本兼容?
是否还有其他命令可以执行完整的语法检查?
以下是PowerShell命令的参考链接:https://dev59.com/SFgQ5IYBdhLWcg3wJwsv#55337824
Invoke-ScriptAnalyzer
是一个PowerShell模块,用于分析和提供代码质量建议。它可以帮助开发者编写更好的PowerShell脚本,提高代码可维护性和可读性。 - iRonGet-Command
不会对任何东西进行“验证” - 它只会“发现”事物。 - Mathias R. JessenGet-Command -Syntax
的目的是显示语法图(使用信息),但为了这样做,脚本必须被解析,因此作为副作用,语法错误确实会浮出水面。 - mklement0