我正在尝试编写在远程 Web 服务器上执行安装程序的脚本。有问题的安装程序也是托管 NServiceBus 的 Windows 服务。如果 RDP 进入服务器,应用程序将通过以下命令安装:
&"$theInstaller" /install /serviceName:TheServiceName
安装程序打印有关其注册服务和连接到数据库的进度的输出stdout,等等。
这在 RDP 会话中工作正常,但是当我通过 PS 远程执行它时,如果我直接或通过以下方式执行它,我会收到一条you-can't-do-this-over-the-network消息Invoke-Command -computername $theRemoteServer:
System.IO.FileLoadException: 无法加载文件或程序集“file://\\theRemoteServer\c$\thePath\AutoMapper.dll”或其依赖项之一。不支持操作。(来自 HRESULT 的异常:0x80131515)---> System.NotSupportedException:尝试从网络位置加载程序集,这会导致程序集在 .NET Framework 的早期版本中被沙箱化。默认情况下,此版本的 .NET Framework 不启用 CAS 策略,因此这种加载可能很危险。如果此加载不打算对程序集进行沙箱处理,请启用 loadFromRemoteSources 开关。有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=155569。
(注意:我在第一行的路径中添加了一个额外的“\”,以便让它在本网站的预览中正确显示。)
DLLthis和其他s 由服务加载,并且服务的执行上下文显然不能被远程化。
我也试过使用Invoke-WmiMethod,它做了一些事情,但不清楚是什么,安装程序的输出丢失了:
Invoke-WMIMethod win32_process create '"$theInstaller" /install /serviceName:TheServiceName' -ComputerName $server(在安装程序引用之前使用和不使用 cmd.exe /k):
__GENUS:2
__CLASS:__PARAMETERS
__SUPERCLASS:
__DYNASTY:__PARAMETERS
__RELPATH:
__PROPERTY_COUNT:2
__DERIVATION:{}
__SERVER:
__NAMESPACE:
__PATH:
的ProcessID:
返回值:9
如何远程执行这样的操作EXE 并捕获输出?