69

私のスクリプトでは、コマンドを実行しようとしています

pandoc -Ss readme.txt -o readme.html

しかし、pandocがインストールされているかどうかはわかりません。だから私はやりたいです(擬似コード)

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

どうすればこれを実際に行うことができますか?

4

2 に答える 2

127

Get-Command(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に関する情報を取得します。

于 2012-06-28T10:15:58.547 に答える
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"
        }
    }
}

これにより、次のことが可能になります。

Ensure-ExecutableExists -Executable pscp -MinimumVersion "0.62.0.0"

要件が満たされている場合、またはそうでない場合にエラーがスローされた場合は、何も実行されません。

于 2017-02-01T15:52:21.303 に答える