我希望能够向域中的特定计算机发送“警报样式的消息”。
问题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添加相同内容后,它仍然不起作用。
我怀疑这可能与本地登录有关,因为我已经登录了,但是某些原因阻止了我在远程计算机上执行此操作。
关于我在做什么错的任何想法吗?
谢谢!
答案 0 :(得分:0)
问题1:
您的脚本不会自动加载提供MessageBox
类的程序集。为此,您需要添加一条语句
Add-Type -Assembly 'System.Windows.Forms'
在一开始。
问题2:
您不能将PowerShell脚本块创建为Windows进程。那根本行不通。此外,在其他用户的上下文中远程生成进程并不是那么简单(如果要在其桌面上显示消息,则需要此操作)。那将是一个巨大的安全漏洞。
使用msg
命令行实用程序是有效的,因为它使用Windows中已内置的消息传递基础结构。如果这不能满足您的需求,则您需要使用某种可以为您提供此基础结构的东西(例如IRC,即时通讯程序,Slack等),或者您自己构建该基础结构(由于以下原因,我通常不建议这样做)安全注意事项)。