PowerShell中的MessageBox无法按我希望的方式工作

时间:2018-12-03 19:00:32

标签: powershell messagebox

我希望能够向域中的特定计算机发送“警报样式的消息”。

问题1:

当前,我将以下内容作为警报,如果从Powershell中运行它,则会完全按照所需的方式弹出弹出窗口。如果我在POwershell之外运行它),右键单击,使用POwershell ISE运行)。

这是我用于此部分的代码:

$ALERT = {Please contact the I.T. Help Desk @EXT 777.  
Reference ERROR CODE: 910978
}

$MYALERT = [System.Windows.Forms.MessageBox]::Show("$ALERT ","I.T. 
DEPARTMENT ALERT !", "ok","Warning”)
$MYALERT

问题2:

我希望能够提示用户输入计算机名称,并将警报发送到该特定计算机。我根本无法使它工作……尽管它曾经在Powershell内工作过一次,但是在Powershell外部运行后却再也无法工作了。但是,在powershell之外运行根本无法正常工作。

这是我这部分的代码:

cls
echo ""
echo ""
$name = read-host "Enter computer name "
$ALERT = {Please contact the I.T. Help Desk @EXT 777.  
Reference ERROR CODE: 910978
}
$MYALERT = {
[System.Windows.Forms.MessageBox]::Show("$ALERT ","I.T. DEPARTMENT ALERT !", 
"ok","Warning”)
}

Invoke-WmiMethod -Path Win32_Process -Name Create -ArgumentList $MYALERT - 
ComputerName $name
pause
cls
echo ""
echo "  Message Sent.  Returning to Main Menu"
cls
EXIT

我可以,但是会在控制台窗口上获得以下输出:

__GENUS          : 2
__CLASS          : __PARAMETERS
__SUPERCLASS     : 
__DYNASTY        : __PARAMETERS
__RELPATH        : 
__PROPERTY_COUNT : 2
__DERIVATION     : {}
__SERVER         : 
__NAMESPACE      : 
__PATH           : 
ProcessId        : 
ReturnValue      : 9
PSComputerName   : 

注意:我实际上并不想以这种方式发送错误代码,只是以示例为例。我想使用它向域中的特定计算机发送消息,以便它显示在所有打开的窗口的顶部,并且显示为警报,而不是来自用户的消息。

此外,似乎对于问题1,在顶部添加“ Add-Type -AssemblyName System.Windows.Forms”可以使它在Powershell之外运行。但是,在为问题2添加相同内容后,它仍然不起作用。

我怀疑这可能与本地登录有关,因为我已经登录了,但是某些原因阻止了我在远程计算机上执行此操作。

关于我在做什么错的任何想法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

问题1:

您的脚本不会自动加载提供MessageBox类的程序集。为此,您需要添加一条语句

Add-Type -Assembly 'System.Windows.Forms'

在一开始。

问题2:

您不能将PowerShell脚本块创建为Windows进程。那根本行不通。此外,在其他用户的上下文中远程生成进程并不是那么简单(如果要在其桌面上显示消息,则需要此操作)。那将是一个巨大的安全漏洞。

使用msg命令行实用程序是有效的,因为它使用Windows中已内置的消息传递基础结构。如果这不能满足您的需求,则您需要使用某种可以为您提供此基础结构的东西(例如IRC,即时通讯程序,Slack等),或者您自己构建该基础结构(由于以下原因,我通常不建议这样做)安全注意事项)。