2012-06-28 9 views
37

In meinem Skript Ich bin über einen BefehlPowershell-Test, wenn ausführbare Datei in Pfad

pandoc -Ss readme.txt -o readme.html 

Aber ich bin mir nicht sicher ausgeführt werden, wenn pandoc installiert ist. Also würde ich gerne tun (Pseudocode)

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

Wie kann ich das wirklich machen?

Antwort

70

Sie können testen, durch Get-Command (gcm)

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

Wenn Sie die Nicht-Existenz eines Befehls in Ihrem Pfad testen möchten, zum Beispiel eine Fehlermeldung angezeigt oder die ausführbare Datei herunterzuladen (man denke NuGet):

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

Versuchen

(Get-Help gcm).description 

in einer Powershell-Sitzung inf zu bekommen Ormation über Get-Command.

+1

Danke David. Wie kann ich das anmutig machen und den großen roten Fehler zum Schweigen bringen? –

+1

Da niemand gesagt hat, tötet das hinzugefügte "-ErrorAction SilentlyContinue" den großen roten Fehler. –

+1

Ich habe 'where.exe' verwendet und den Exit-Code überprüft, aber das war kein PS-Befehl. – orad

1

Nur für den Fall, dass einige es nützlich finden. Hier ist eine Funktion im Geiste von David Brabants Antwort mit einem Check für minimale Versionsnummern.

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" 
     } 
    } 
} 

Auf diese Weise können Sie folgendes tun:

Ensure-ExecutableExists -Executable pscp -MinimumVersion "0.62.0.0" 

Es macht nichts, wenn die Bedingung erfüllt ist oder einen Fehler wirft es nicht ist.

Verwandte Themen