有没有办法验证Powershell脚本



我的应用允许用户输入稍后将为你运行的Powershell脚本。有没有一种简单的方法可以在不运行 powershell 脚本的情况下对其进行验证,以便当用户输入它时,程序可以报告语法错误?

谢谢。

在PowerShell v2中,你有分词器,可以在不运行脚本的情况下处理脚本。看看类System.Management.Automation.PSParser和它的静态方法Tokenize:

http://msdn.microsoft.com/en-us/library/system.management.automation.psparser(v=vs.85).aspx

在 v3 中它变得更好,有整个语言命名空间/AST 支持:

http://msdn.microsoft.com/en-us/library/system.management.automation.language(v=vs.85).aspx

呵巴特克

我写了一个函数来自动化这个过程:Test-PSScript,你可以在我的博客上找到它

#Requires -Version 2
function Test-PSScript
{
   param(
      [Parameter(Mandatory=$true, Position=0, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)] 
      [ValidateNotNullOrEmpty()] 
      [Alias('PSPath','FullName')] 
      [System.String[]] $FilePath,
      [Switch]$IncludeSummaryReport
   )
   begin
   {
      $total=$fails=0
   }
   process
   {
       $FilePath | Foreach-Object {
         if(Test-Path -Path $_ -PathType Leaf)
         {
            $Path = Convert-Path –Path $_ 
            $Errors = $null
            $Content = Get-Content -Path $path 
            $Tokens = [System.Management.Automation.PsParser]::Tokenize($Content,[ref]$Errors)
            if($Errors)
            {
               $fails+=1
               $Errors | Foreach-Object { 
                  $_.Token | Add-Member -MemberType NoteProperty -Name Path -Value $Path -PassThru | `
                  Add-Member –MemberType NoteProperty -Name ErrorMessage -Value $_.Message -PassThru
               }
            }
           $total+=1 
         }  
      }
   } 
   end 
   {
      if($IncludeSummaryReport) 
      {
         Write-Host "`n$total script(s) processed, $fails script(s) contain syntax errors."
      }
   }
} 

相关内容

  • 没有找到相关文章

最新更新