我想为一些生成powershell脚本的代码编写一个单元测试,然后检查脚本是否有有效的语法。如何自动语法检查PowerShell脚本文件?
在没有真正执行脚本的情况下做这件事的好方法是什么?
.NET代码解决方案非常理想,但通过启动外部进程可以使用的命令行解决方案就足够了。
我想为一些生成powershell脚本的代码编写一个单元测试,然后检查脚本是否有有效的语法。如何自动语法检查PowerShell脚本文件?
在没有真正执行脚本的情况下做这件事的好方法是什么?
.NET代码解决方案非常理想,但通过启动外部进程可以使用的命令行解决方案就足够了。
你可以通过Parser
运行代码,并观察是否引发任何错误:
# Empty collection for errors
$Errors = @()
# Define input script
$inputScript = 'Do-Something -Param 1,2,3,'
[void][System.Management.Automation.Language.Parser]::ParseInput($inputScript,[ref]$null,[ref]$Errors)
if($Errors.Count -gt 0){
Write-Warning 'Errors found'
}
这很容易变成一个简单的函数:
function Test-Syntax
{
[CmdletBinding(DefaultParameterSetName='File')]
param(
[Parameter(Mandatory=$true, ParameterSetName='File')]
[string]$Path,
[Parameter(Mandatory=$true, ParameterSetName='String')]
[string]$Code
)
$Errors = @()
if($PSCmdlet.ParameterSetName -eq 'String'){
[void][System.Management.Automation.Language.Parser]::ParseInput($Code,[ref]$null,[ref]$Errors)
} else {
[void][System.Management.Automation.Language.Parser]::ParseFile($Path,[ref]$null,[ref]$Errors)
}
return [bool]($Errors.Count -lt 1)
}
然后使用像:
if(Test-Syntax C:\path\to\script.ps1){
Write-Host 'Script looks good!'
}
PS Script Analyzer是开始静态分析代码的好地方。
PSScriptAnalyzer通过施加一组内置的或在脚本 定制规则的被分析提供了用于在脚本潜在 代码缺陷脚本分析和检查。
它也与Visual Studio Code整合。
作为单元测试的一部分,模拟PowerShell有许多策略,并且还可以看一下Pester。
脚本专家的Unit Testing PowerShell Code With Pester
PowerShellMagazine的Get Started With Pester (PowerShell unit testing framework)
古怪我创建的文档主题这个今天:http://stackoverflow.com/documentation/powershell/9619/psscriptanalyzer-powershell-script-analyzer –
这可能是最直接的点答案这个问题。矿是更普遍的单元测试。 –