检查文件是否存在,如果不存在,则显示一个消息框

时间:2018-09-18 00:04:58

标签: powershell

我正在尝试创建一个启动器,它将启动该应用程序,否则将显示一个消息框。我使用了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 :(得分:0)

使其适应您的代码。您需要-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')
}

答案 1 :(得分:0)

有一个Test-Path cmdlet可以缩短您的工作时间:

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')
}

答案 2 :(得分:0)

您的代码有两个问题:

  • 您的函数不返回任何内容,因为捕获了所有输出。布尔比较中,返回值为空,返回值为$false
  • 表达式LaunchAvaya -eq $true不会将函数的返回值与值$true进行比较,而是将调用LaunchAvaya与(未定义)参数{{1} }。为了能够将函数的返回值与某个值进行比较,请切换操作数:

    -eq $true

    将函数调用放在括号中

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

    或完全删除运算符和第二个操作数(默认情况下,PowerShell会进行布尔评估):

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

将您的代码更改为以下内容:

if (LaunchAvaya) { ... }

问题将消失。