我正在编写一个控制台应用程序来验证 PowerShell 脚本语法。我的请求是验证 PowerShell 脚本而不执行该脚本。我在下面的 PowerShell 命令中发现了这个命令,它可以在不执行脚本的情况下执行语法检查。
Get-Command -syntax 'D:\powershell\deleteDemoFile.ps1'
Run Code Online (Sandbox Code Playgroud)
但是,我发现它没有进行完整的语法检查。例如,在 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
Run Code Online (Sandbox Code Playgroud)
所以我想知道。