Проверьте, существует ли файл, и если нет, покажите окно сообщения - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь сделать лаунчер, который запустит приложение и, если нет, выдаст окно сообщения.Я использовал if..else.Однако, даже если файл существует, окно сообщения все еще появляется.Я не уверен, как исправить код.

Вот мой код сценария:

function LaunchAvaya {
    $testPath = Test-Path "C:\Program Files (x86)\Avaya\Avaya one-X Agent\OneXAgentUI.exe"
    $Checkavaya = Set-Location "C:\Program Files (x86)\Avaya\Avaya one-X Agent"
    $startavaya = Start-Process "OneXAgentUI.exe"
}

Вот мой if..else:

if (LaunchAvaya -eq $true) {
    LaunchAvaya
} else {
    $avmsgno = [System.Windows.Forms.MessageBox]::Show('No Avaya is installed in this Workstation', 'Warning')
}

Ответы [ 3 ]

0 голосов
/ 18 сентября 2018

Существует командлет Test-Path, чтобы сократить время вашей работы:

Add-Type -AssemblyName System.Windows.Forms
$path = 'C:\Program Files (x86)\Avaya\Avaya one-X Agent\OneXAgentUI.exe'
if (Test-Path -Path $path)
{
    Start-Process -FilePath $path -WorkingDirectory (Split-Path -Path $path)
}
else
{
    $null = [System.Windows.Forms.Messagebox]::Show('Avaya is not installed on this workstation', 'Warning')
}
0 голосов
/ 18 сентября 2018

Есть две проблемы с вашим кодом:

  • Ваша функция ничего не возвращает, потому что весь вывод захвачен.Пустое возвращаемое значение оценивается как $false в логическом сравнении.
  • Выражение LaunchAvaya -eq $true не будет сравнивать возвращаемое значение функции со значением $true, но вместо этого вызовет LaunchAvaya с (неопределенным) параметром -eq $true.Чтобы иметь возможность сравнить возвращаемое значение функции со значением, либо переключите операнды:

    if ($true -eq LaunchAvaya) { ... }
    

    поместите вызов функции в скобки:

    if ((LaunchAvaya) -eq $true) { ... }
    

    или удалите оператор и второй операндполностью (PowerShell выполняет логическую оценку по умолчанию):

    if (LaunchAvaya) { ... }
    

Измените ваш код на что-то вроде этого:

function LaunchAvaya {
    $avayaDir   = "${env:ProgramFiles(x86)}\Avaya\Avaya one-X Agent"
    $avayaAgent = "${avayaDir}\OneXAgentUI.exe"
    if (Test-Path $avayaAgent) {
        Start-Process -FilePath $avayaAgent -WorkingDirectory $avayaDir | Out-Null
        return $?
    }
}

if (LaunchAvaya) {
    'Avaya Agent started.'
} else {
    'Avaya Agent missing or not started.'
}

, и проблема исчезнет.

0 голосов
/ 18 сентября 2018

Адаптируйте это к своему коду.Вам нужен -PassThru (см. get-help Start-Process -full).Также ваша функция не возвращает значение.

Ваш if не имеет смысла, потому что if (LaunchAvaya -eq $true) запустит программу, так что следующая строка LaunchAvaya должна делать что?

Add-Type -AssemblyName System.Windows.Forms | Out-Null

function StartNotepad()
{
    $program = 'c:\windows\notepad.exe'
    $started = Start-Process $program -PassThru
    return ($started -ne $null)
}


if (StartNotepad)
{
    [System.Windows.Forms.MessageBox]::Show("Notepad, yes")
}
else
{
    [System.Windows.Forms.MessageBox]::Show("Notepad, no", 'Warning')
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...