2017-04-04 22 views
2

我想为一些生成powershell脚本的代码编写一个单元测试,然后检查脚本是否有有效的语法。如何自动语法检查PowerShell脚本文件?

在没有真正执行脚本的情况下做这件事的好方法是什么?

.NET代码解决方案非常理想,但通过启动外部进程可以使用的命令行解决方案就足够了。

回答

5

你可以通过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!' 
} 
+0

这可能是最直接的点答案这个问题。矿是更普遍的单元测试。 –

3

PS Script Analyzer是开始静态分析代码的好地方。

PSScriptAnalyzer通过施加一组内置的或在脚本 定制规则的被分析提供了用于在脚本潜在 代码缺陷脚本分析和检查。

它也与Visual Studio Code整合。

作为单元测试的一部分,模拟PowerShell有许多策略,并且还可以看一下Pester。

脚本专家的Unit Testing PowerShell Code With Pester
PowerShellMagazine的Get Started With Pester (PowerShell unit testing framework)

+1

古怪我创建的文档主题这个今天:http://stackoverflow.com/documentation/powershell/9619/psscriptanalyzer-powershell-script-analyzer –

相关问题