Powershell CLI中的GUI和PSRemoting

时间:2017-01-14 23:43:22

标签: winforms powershell gridview

最近,我创建了一个使用诸如Out-GridView和Winforms等GUI的脚本,并将该模块放在远程Windows 2012服务器上。这是为了允许用户从集中位置建立远程PSSession并执行脚本。

例如:

1。尝试调用winform时出现以下错误:

Exception calling "ShowDialog" with "0" argument(s): "Showing a modal dialog box or form when the application is not running in UserInteractive mode is not a valid operation. Specify the ServiceNotification or DefaultDesktopOnly style
to display a notification from a service application."
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : InvalidOperationException
    + PSComputerName        : servera

2 尝试将结果放入Out-GridView时,我收到以下错误:

Out-GridView does not work in a remote session.
    + CategoryInfo          : InvalidOperation: (Microsoft.Power...GridViewCommand:OutGridViewCommand) [Out-GridView], NotSupportedException
    + FullyQualifiedErrorId : RemotingNotSupported,Microsoft.PowerShell.Commands.OutGridViewCommand
    + PSComputerName        : servera

问题:

是否有任何变通办法可以让我使用OGV和Winforms?

旁注:  我愿意允许用户将模块导出到他们的物理工作站,以便他们在需要时使用这些选项--OGV和Winforms - 只有在有效/安全的情况下才能这样做。另一方面,我是开放的不同的建议。

2 个答案:

答案 0 :(得分:2)

您需要使用本地计算机上的UI,而不是远程计算机上的UI。远程检索数据,在本地显示。

例如:

Invoke-Command -ComputerName RemoteServer -Scriptblock { Get-Process } | Out-Gridview

使用scriptblock中的gridview将尝试在RemoteServer上启动UI并向您提供您提到的错误。

答案 1 :(得分:0)

Invoke-Command我认为这会更好,因为您告诉远程计算机该做什么而不是要求使用Enter-PSSessionNew-PSSession直接与远程计算机进行交互。