如何在没有按钮的Powershell中创建弹出消息

时间:2015-09-28 16:10:33

标签: powershell popup dialog

我试图在Powershell中创建一个消息对话,其中用户无权对消息采取行动,因为这是意图。因此消息将使X按钮与按钮一起变灰(不显示按钮甚至更好)。

我能够达到的最接近的是通过以下代码禁用X:

$wshell = New-Object -ComObject Wscript.Shell -ErrorAction Stop
$wshell.Popup("Aborted",0,"ERROR!",48+4)

但无法弄清楚禁用按钮部分。 MS下面的文章也没有什么帮助:

Sitecore Content Author's Reference and Cookbook

http://blogs.technet.com/b/heyscriptingguy/archive/2006/07/27/how-can-i-display-a-message-box-that-has-no-buttons-and-that-disappears-after-a-specified-period-of-time.aspx

通过网络引用了一些其他文章甚至建议使用HTML或VB库定制按钮。但不是我想要的。

任何帮助/提示/建议都将深表感谢。

此致 沙克蒂

2 个答案:

答案 0 :(得分:1)

深入了解.NET Windows.Forms命名空间,您可以使用它创建任何类型的窗口:

https://msdn.microsoft.com/en-us/library/system.windows.forms.aspx

这是一个快速示例窗口,没有按钮,用户无法移动/关闭,但在5秒后自动关闭:

Function Generate-Form {

    Add-Type -AssemblyName System.Windows.Forms    

    # Build Form
    $objForm = New-Object System.Windows.Forms.Form
    $objForm.Text = "Test"
    $objForm.Size = New-Object System.Drawing.Size(220,100)

    # Add Label
    $objLabel = New-Object System.Windows.Forms.Label
    $objLabel.Location = New-Object System.Drawing.Size(80,20) 
    $objLabel.Size = New-Object System.Drawing.Size(100,20)
    $objLabel.Text = "Hi there!"
    $objForm.Controls.Add($objLabel)

    # Show the form
    $objForm.Show()| Out-Null

    # wait 5 seconds
    Start-Sleep -Seconds 5

    # destroy form
    $objForm.Close() | Out-Null

}

generate-form

答案 1 :(得分:0)

使用上面的脚本作为启动点,我正在尝试创建一个函数,该函数将允许我弹出一个请稍等的消息,请运行更多脚本然后关闭弹出窗口

Function Popup-Message {

    param ([switch]$show,[switch]$close)

    Add-Type -AssemblyName System.Windows.Forms  

    # Build Form
    $objForm = New-Object System.Windows.Forms.Form
    $objForm.Text = "Test"
    $objForm.Size = New-Object System.Drawing.Size(220,100)

    # Add Label
    $objLabel = New-Object System.Windows.Forms.Label
    $objLabel.Location = New-Object System.Drawing.Size(80,20) 
    $objLabel.Size = New-Object System.Drawing.Size(100,20)
    $objLabel.Text = "Hi there!"
    $objForm.Controls.Add($objLabel)



    If ($show)
    {
        $objForm.Show() | Out-Null
        $global:test = "Show"
    }


    If ($close)
    {
        # destroy form
        $objForm.Close() | Out-Null
        $global:test = "Close"
    }
}

然后我可以通过以下方式显示弹出窗口:

Popup-Message -show

此时,我可以看到 $ test 变量为显示

但是当我尝试使用以下方法关闭窗口时:

Popup-Message -close

但是弹出窗口不会关闭 如果我再次查看 $ test ,它将显示为关闭

我假设这与将函数保留在Global Scope中有关,但是我不知道如何使用表单