首页 > 解决方案 > 包含“是/否”消息框以关闭应用程序的脚本不起作用

问题描述

我正在尝试编写一个脚本,该脚本将显示一个带有是/否按钮的消息框。我想要“是”来关闭打开的应用程序,而“否”来结束脚本。

我已经编写了下面代码的一些突变,但我能得到的最好的结果是是和否都关闭了应用程序。这是我的代码:

Add-Type -AssemblyName PresentationCore,PresentationFramework
[System.Windows.MessageBox]::Show('Do you want to close TAS?',‘WARNING’,‘YesNo’)
[System.Windows.MessageBoxImage]::Warning

$msgBoxInput = [System.Windows.MessageBoxButton]::Show(‘YesNo’)

   switch  ($msgBoxInput) {
       ‘Yes’ {
           Stop-Process -Name ATIS-Broadcaster2 
           ‘YES’
        }

        ‘No’ {
           Exit-PSSession
           ‘NO’
        }
}

标签: wpfpowershellmessagebox

解决方案


尝试以下操作:

Add-Type -AssemblyName PresentationCore, PresentationFramework

switch (
  [System.Windows.MessageBox]::Show(
    'Do you want to close TAS?',
    'WARNING',
    'YesNo',
    'Warning'
  )
) {
  'Yes' {
    'YES'
    #  Stop-Process -Name ATIS-Broadcaster2 
  }
  'No' {
    'NO'
    #  Exit-PSSession
  }
}

注意:我还将您的“大弯”单引号转换为常规的 ASCII 范围单引号;虽然 PowerShell 接受这两种类型,但最好坚持使用后者。

请参阅System.Windows.MessageBox文档。

请注意,传递 和 的参数'YesNo'以及'Warning'方法.Show()的返回值期望/返回枚举[1]

但是,PowerShell 的自动类型转换方便地将值名称指定为字符串,例如'YesNo''Warning''Yes'代替[System.Windows.MessageBoxButton]::YesNo,[System.Windows.MessageBoxImage]::Warning[System.Windows.MessageBoxResult]::Yes,这简化了代码。


[1] 即,从 派生的值类型的实例System.Enum,它们在符号名称下定义离散数值。


推荐阅读