2016-08-08 22 views
0

Wäre es möglich, ein Popup auf einem Remote-Computer zu generieren, der (Remote-) Benutzereingaben erfordert? Angenommen, ich verwende Powershell, um ein Skript auf einem Remotecomputer auszuführen, und möchte, dass der aktive Benutzer hinter diesem Computer die Ausführung des Skripts akzeptiert. Wenn dies nicht standardmäßig möglich ist, würde es irgendwelche einfachen Lösungen von Drittanbietern geben (die KEINE Installation auf dem Computer der Remote-Benutzer erfordern), die ich verwenden könnte, um das gleiche Ziel zu erreichen?Remote-Benutzereingabe

Ich denke, aus der Box könnte ich Powershell verwenden, um E-Mails zu senden und dann nach eingehenden Antworten zu suchen, aber das fühlt sich einfach ineffizient an.

+0

Sie könnten versuchen, eine geplante Aufgabe zu erstellen, die als interaktiver Benutzer ausgeführt und sofort gestartet wird. Ich bin mir nicht sicher, ob du das schaffen kannst, um etwas zu veröffentlichen, habe es nie versucht. Andernfalls ist es etwas mühsam, etwas im Kontext des angemeldeten Benutzers auszuführen. –

+0

@Chris Dent Interessante Option. Werde mich darum kümmern, danke. – RockYoClock

Antwort

0

Ich bin eigentlich sehr nah daran, etwas wie diese mit der Toast-Nachrichten-API von der UWP zu machen. Ich kann Toast-Nachrichten mit Schaltflächen und Textboxen erstellen (auch auf einem Remote-Rechner mit Invoke-Command), ich war jedoch nicht erfolgreich beim Abrufen der Ergebnisse von den Eingaben oder Schaltflächen (und geht durch die UWP-Dokumentation, wie es aussieht nicht möglich mit Powershell).

Beispielcode, an dem ich gearbeitet habe (sehen Sie in der Dokumentation der Toast-Nachrichten in UWP nach, um weitere Informationen zu erhalten - diese Version ermöglicht das Ausführen dieser lokalen oder Remote-Version. Ich habe den XML-Inhalt für eine Schaltfläche jedoch nicht eingeschlossen das ist einfach zu implementieren, wenn Sie der API-Dokumentation folgen, die Microsoft geschrieben hat) - vielleicht haben Sie mehr Glück (Disclaimer: das war nur mein erstes funktionierendes Konzept, Code ist noch nicht optimiert, viel Doppelcode für den "lokalen" und "Remote" -Version usw.):

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

Das ist eine nette Idee mit UWP. Schade, es ist nicht möglich, Benutzereingaben remote zurückzugeben. Falls Sie diesen Beitrag noch nicht gefunden haben, habe ich einige Beispiele mit Ihrer Methode gefunden: https://msdn.microsoft.com/en-us/windows/uwp/controls-and-patterns/tiles-and-notifications- adaptive interaktive Toasts – RockYoClock