私のスクリプトでは、コマンドを実行しようとしています
pandoc -Ss readme.txt -o readme.html
しかし、pandoc
がインストールされているかどうかはわかりません。だから私はやりたいです(擬似コード)
if (pandoc in the path)
{
pandoc -Ss readme.txt -o readme.html
}
どうすればこれを実際に行うことができますか?
私のスクリプトでは、コマンドを実行しようとしています
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
}
パスにコマンドが存在しないことをテストする場合、たとえば、エラーメッセージを表示したり、実行可能ファイルをダウンロードしたりする場合(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"
要件が満たされている場合、またはそうでない場合にエラーがスローされた場合は、何も実行されません。