测试 PowerShell 中的可执行文件是否在路径中

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

pandoc -Ss readme.txt -o readme.html

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

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

我怎么能真的这么做呢?

24164 次浏览

你可以通过 获取-命令(gcm)测试

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

如果您想测试路径中不存在命令,例如显示错误消息或下载可执行文件(想想 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 的信息。

下面是一个符合 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"

如果满足了需求或者抛出了不符合的错误,那么它将不执行任何操作。