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

Col*_*nic 54 powershell

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

pandoc -Ss readme.txt -o readme.html
Run Code Online (Sandbox Code Playgroud)

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

if (pandoc in the path)
{
    pandoc -Ss readme.txt -o readme.html
}
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做呢?

Dav*_*ant 100

你可以通过Get-Command(gcm)进行测试

if (Get-Command "pandoc.exe" -ErrorAction SilentlyContinue) 
{ 
   pandoc -Ss readme.txt -o readme.html
}
Run Code Online (Sandbox Code Playgroud)

如果您想测试路径中不存在命令,例如显示错误消息或下载可执行文件(想想NuGet):

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

尝试

(Get-Help gcm).description
Run Code Online (Sandbox Code Playgroud)

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

  • 我使用`where.exe`并检查退出代码,但这不是PS命令. (3认同)
  • 由于没有人说,添加的“-ErrorAction SilentlyContinue”杀死了大红色错误。 (2认同)

Bru*_*uno 6

这是一个符合 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"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这允许您执行以下操作:

Ensure-ExecutableExists -Executable pscp -MinimumVersion "0.62.0.0"
Run Code Online (Sandbox Code Playgroud)

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