从批处理文件启动 Powershell 时弹出 Yes/No 消息框
Popup Yes/No message Box When Launching Powershell From a Batch File
我正在努力寻找这个问题的答案,这可能意味着我问错了问题。
我写了一个 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 =”,该框会弹出,但用户选择什么并不重要,代码只是 运行s 就好像他们按下了“是”一样。 =14=]
这可能是完全错误的方法,我真的不知道。我一直为我的用户组(我有 30 多个用户)使用批处理文件,因为它比尝试使用实际 PS1 更容易。如果有 better/easier 路线,我洗耳恭听!
这是我使用 PS1 的第一个表格,所以我也可能会做一些超级错误的事情。
谢谢大家的帮助。
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
window中的返回值):
Powershell.exe -executionpolicy remotesigned -File D:\PShell\SO366658.ps1
Runs Code
我正在努力寻找这个问题的答案,这可能意味着我问错了问题。
我写了一个 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 =”,该框会弹出,但用户选择什么并不重要,代码只是 运行s 就好像他们按下了“是”一样。 =14=]
这可能是完全错误的方法,我真的不知道。我一直为我的用户组(我有 30 多个用户)使用批处理文件,因为它比尝试使用实际 PS1 更容易。如果有 better/easier 路线,我洗耳恭听!
这是我使用 PS1 的第一个表格,所以我也可能会做一些超级错误的事情。
谢谢大家的帮助。
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
window中的返回值):
Powershell.exe -executionpolicy remotesigned -File D:\PShell\SO366658.ps1
Runs Code