从批处理文件启动PowerShell时弹出“是/否”消息框

3

我很难找到这个问题的答案,这可能意味着我问错了问题。

我写了一个包含弹出窗口的PS1脚本,一切都很顺利!我使用了以下方法:

$msgBoxInput =  [System.Windows.MessageBox]::Show("You are about to publish Part $UserPart1, would you like to coninue?",'Confirm Update','YesNo')switch  ($msgBoxInput) 
      {
          'Yes' 
          {
          Runs Code
          }
          'No' 
          {
          Return
          }
      }

这很完美。直到我使用批处理文件启动PS1。

这是我用来运行批处理文件的代码:

Powershell.exe -executionpolicy remotesigned -windowstyle hidden -File  "C:\Updater 2.0.ps1"

批处理文件可以正常运行,但弹窗没有出现。因此我改变了策略,尝试使用以下方式来实现弹窗:
 $msgBoxInput =  [System.Windows.MessageBox]::Show("You are about to publish Part $UserPart1, would you like to coninue?",'Confirm Update','YesNo')

      

再次出现消息框不弹出的问题。如果我删除消息开头的"$msgBoxInput =",则消息框会弹出,但无论用户选择什么,代码都会像按下"Yes"一样运行。
这可能是完全错误的方法,老实说我不知道。我一直为我的用户组(我有30多个用户)使用批处理文件,因为比尝试使用实际的PS1更容易。如果有更好/更容易的路线,我全耳朵倾听!
这是我使用PS1的第一个表单,所以我可能做错了什么。
感谢大家的帮助。

1
当你在第一行末尾删除;}"时,第二个代码示例应该可以工作。 - zett42
2
我还没有做过任何测试,但是我不禁想知道-windowstyle hidden是否是问题所在。隐藏窗口是否也会隐藏弹出窗口? - TheMadTechnician
@zett42,那是我复制/粘贴的错误。那个片段实际上不在那里。我已经更正了帖子。 - Lowendz113
@TheMadTechnician 我刚刚尝试去掉隐藏位,但弹出窗口仍然无法工作 :( - Lowendz113
$UserPart1 定义在哪里? - JosefZ
1个回答

5

System.Windows.MessageBox 类型在 PowerShell 中不会自动加载(除非使用 ISE)。以下代码片段可正常工作:

if ( $null -eq ('System.Windows.MessageBox' -as [type]) ) {
    Add-Type -AssemblyName PresentationFramework
}
$UserPart1 = "XXX"
$msgBoxInput =  [System.Windows.MessageBox]::Show(
    "You are about to publish Part $UserPart1, would you like to coninue?",
    'Confirm Update',
    'YesNo')
switch  ($msgBoxInput) 
      {
          'Yes' 
          {
            # your code here
            Return "Runs Code"
          }
          'No' 
          {
            Return "Runs Nothing"
          }
      }

输出(省略了-windowstyle hidden以便在当前cmd窗口中查看返回值):

进入图片描述

Powershell.exe -executionpolicy remotesigned -File D:\PShell\SO\72366658.ps1
Runs Code

太棒了!谢谢伙计!现在我只需要想办法再次将cmd窗口隐藏起来! - Lowendz113
@Lowendz113 将 -windowstyle hidden 放回到 Powershell.exe … 行中。 - JosefZ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接