2017-04-04 16 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 –

関連する問題