远程用户输入



是否可以在远程计算机上生成需要(远程(用户输入的弹出窗口?假设我使用Powershell在远程计算机上执行脚本,并希望该计算机后面的活动用户接受运行该脚本。如果默认情况下这是不可能的,我会用任何简单的第三方解决方案(不需要在远程用户计算机上安装(来实现同样的目标吗?

我可以打破常规地使用powershell发送邮件,然后扫描收到的回复,但这感觉效率很低。

实际上,我非常接近于使用UWP的Toast消息API来制作这样的东西。我可以用按钮和文本框创建toast消息(也可以在远程机器上使用Invoke命令(,但我无法成功地从输入或按钮中返回结果(通过UWP文档,Powershell似乎无法做到这一点(。

我一直在处理的示例代码(查看UWP中Toast消息的文档以了解更多信息-此版本允许您运行此本地或远程。我没有包含按钮的XML内容,但如果您遵循Microsoft编写的API文档,这很容易实现(-也许您会更幸运(免责声明:这只是我的第一个工作概念,代码还没有优化,"本地"one_answers"远程"版本有很多重复的代码等(:

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()}
}

相关内容

  • 没有找到相关文章

最新更新