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"
如果满足要求,则不执行任何操作,否则抛出错误。