是否可以在需要(远程)用户输入的远程计算机上生成弹出窗口?假设我使用Powershell在远程计算机上执行脚本,并希望该计算机后面的活动用户接受运行脚本。如果默认情况下这是不可能的,是否有任何简单的第三方解决方案(在远程用户计算机上不需要安装)我可以用来实现相同的目标?
开箱即用我可以使用powershell发送邮件然后扫描收到的回复,但这感觉效率低下。
答案 0 :(得分:0)
我实际上非常接近使用来自UWP的Toast消息API来制作类似的东西。 我可以使用按钮和文本框创建Toast消息(也可以通过使用Invoke-Command在远程计算机上创建),但是我已经无法通过输入或按钮获取结果(并且通过UWP文档看起来这不是可能与Powershell一起。)
示例代码我一直在努力(查看UWP中Toast消息的文档以获取更多信息 - 此版本允许您运行本地或远程。我没有包含XML内容一个按钮,但如果你按照微软写的API文档那么容易实现 - 也许你会有更多的运气(免责声明:这只是我的第一个工作概念,代码还没有优化) ,"本地"和#34;远程"版本等的许多重复代码:)
Function Invoke-ToastMessage
{
[CmdletBinding()]
Param
(
[string]$Message,
[string]$Notifier = "Administrators",
[string]$ComputerName = $null
)
[scriptblock]$ToastScriptRemote = {
$Message = $args[0]
$Notifier = $args[1]
# XML Template
[xml]$XmlTemplate = @"
<toast scenario="reminder">
<visual>
<binding template="ToastGeneric">
<text>Admin Notification</text>
<text>$Message</text>
</binding>
</visual>
<actions>
</actions>
</toast>
"@
# fake load the assemblies
[void][Windows.UI.Notifications.ToastNotification,Windows.UI.Notifications,ContentType=WindowsRuntime]
[void][Windows.Data.Xml.Dom.XmlDocument,Windows.Data.Xml.Dom,ContentType=WindowsRuntime]
$FinalXML = [Windows.Data.Xml.Dom.XmlDocument]::new()
$FinalXML.LoadXml($XmlTemplate.OuterXml)
## create the toast
$Toast = [Windows.UI.Notifications.ToastNotification]::new($FinalXML)
## Show the TOAST message
[Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier($Notifier).show($Toast)
}
[scriptblock]$ToastScriptLocal = {
# XML Template
[xml]$XmlTemplate = @"
<toast scenario="reminder">
<visual>
<binding template="ToastGeneric">
<text>Admin Notification</text>
<text>$Message</text>
</binding>
</visual>
<actions>
</actions>
</toast>
"@
# fake load the assemblies
[void][Windows.UI.Notifications.ToastNotification,Windows.UI.Notifications,ContentType=WindowsRuntime]
[void][Windows.Data.Xml.Dom.XmlDocument,Windows.Data.Xml.Dom,ContentType=WindowsRuntime]
$FinalXML = [Windows.Data.Xml.Dom.XmlDocument]::new()
$FinalXML.LoadXml($XmlTemplate.OuterXml)
## create the toast
$Toast = [Windows.UI.Notifications.ToastNotification]::new($FinalXML)
## Show the TOAST message
[Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier($Notifier).show($Toast)
}
if (![string]::IsNullOrEmpty($ComputerName))
{
Invoke-Command -ComputerName $ComputerName -ScriptBlock $ToastScriptRemote -ArgumentList $Message,$Notifier
}
else {$ToastScriptLocal.Invoke()}
}