Winforms Powershell CLI中的GUI和PSRemoting

Winforms Powershell CLI中的GUI和PSRemoting,winforms,powershell,gridview,Winforms,Powershell,Gridview,最近,我创建了一个脚本,它利用了GUI,如OutGridView和Winforms,并将该模块放在远程Windows 2012服务器上。这是为了允许用户建立远程PSSessions并从集中的位置执行脚本 例如: 1。尝试调用winform时,我遇到以下错误: Exception calling "ShowDialog" with "0" argument(s): "Showing a modal dialog box or form when the application is not run

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

例如:

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
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
2. 尝试将结果放入Out GridView时,我遇到以下错误:

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
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-只有在有有效/安全的方法时才可以。另一方面,我愿意接受不同的建议。

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

例如:

Invoke命令-ComputerName远程服务器-Scriptblock{Get Process}| Out Gridview


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

调用命令
我认为在这里会更好,因为您告诉远程计算机该做什么,而不是使用
输入PSSession
新建PSSession

1。通过远程会话获取所需的数据。2.以某种形式使用它。3.利润?您好,如果我没弄错的话,我想您的意思是在外部范围中声明一个变量以供重用。但是,您能否详细说明您的解决方案?谢谢这绝对是一个可行的解决办法。我已经尝试过了,有没有更简单的方法可以做到这一点?如果您对模块进行签名并将它们放在中心位置:您的客户端可以从其桌面导入模块并在那里运行,前提是它们的执行策略至少与
RemoteSigned
一样不受限制。我不知道如何从远程pssession中调用调用方计算机上的UI。由于某些原因,我无法对自定义模块使用invoke命令。。。。有没有一种特定的方法可以让模块设置为使用Invoke命令?我们现在开始转向另一组问题。其想法是将脚本(或模块)放在远程共享上。从桌面上运行脚本/cmdlet-它们将接受参数或对目标远程计算机进行预编码。在使用
invoke command
或会话等机制从远程计算机检索数据时,您仍然必须遵循在显示计算机上本地运行代码的相同基本原则
Invoke命令
在指定位置执行代码,被调用命令中的某些内容无法在本地显示UI。