我正在尝试创建一个启动器,它将启动该应用程序,否则将显示一个消息框。我使用了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')
}
答案 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) { ... }
问题将消失。