Powershelltesting如果在path中可执行

在我的脚本中,我即将运行一个命令

pandoc -Ss readme.txt -o readme.html 

但我不确定是否安装了pandoc 。 所以我想做(伪代码)

 if (pandoc in the path) { pandoc -Ss readme.txt -o readme.html } 

我怎样才能真正做到这一点?

你可以通过Get-Command(gcm)

 if (Get-Command "pandoc.exe" -ErrorAction SilentlyContinue) { pandoc -Ss readme.txt -o readme.html } 

如果您想testingpath中是否存在命令,例如显示错误消息或下载可执行文件(请考虑NuGet):

 if ((Get-Command "pandoc.exe" -ErrorAction SilentlyContinue) -eq $null) { Write-Host "Unable to find pandoc.exe in your PATH" } 

尝试

 (Get-Help gcm).description 

在PowerShell会话中获取有关Get-Command的信息。

以防万一发现它有用。 大卫·布拉class特(David Brabant)的答案是一个函数,检查最小版本号。

 Function Ensure-ExecutableExists { Param ( [Parameter( Mandatory = $True )] [string] $Executable, [string] $MinimumVersion = "" ) $CurrentVersion = ( Get-Command -Name $Executable -ErrorAction Stop ).Version If( $MinimumVersion ) { $RequiredVersion = [version]$MinimumVersion If( $CurrentVersion -lt $RequiredVersion ) { Throw "$( $Executable ) version $( $CurrentVersion ) does not meet requirements" } } } 

这使您可以执行以下操作:

 Ensure-ExecutableExists -Executable pscp -MinimumVersion "0.62.0.0" 

如果满足要求,则不执行任何操作,否则抛出错误。