Тест Powershell, если исполняемый путь
В моем script я собираюсь запустить команду
pandoc -Ss readme.txt -o readme.html
Но я не уверен, установлен ли pandoc
. Поэтому я хотел бы сделать (псевдокод)
if (pandoc in the path)
{
pandoc -Ss readme.txt -o readme.html
}
Как я могу сделать это по-настоящему?
Ответы
Ответ 1
Вы можете протестировать 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"
}
Try
(Get-Help gcm).description
в сеансе PowerShell, чтобы получить информацию о Get-Command.
Ответ 2
На всякий случай некоторые считают это полезным. Вот функция в духе ответа Дэвида Брабанта с проверкой минимальных номеров версий.
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"
Он ничего не делает, если требование выполняется или выдает ошибку, это не так.