【发布时间】:2016-07-27 15:38:24
【问题描述】:
我的公司使用名为“Hyperion”的基于 Oracle 的产品。我相信甲骨文聘请了一些高中生来编写批处理文件来启动和停止服务。我遇到的问题是我想使用 Powershell Remoting 执行一个名为“Stop_Hyperion.bat”的批处理文件,该文件由 Oracle 提供,用于以受控方式停止多个进程和服务。不幸的是,这对我来说不起作用:
$Session = New-PSSession -ComputerName HyperionServer1 -Credential $PSCredential
Invoke-Command -Session $Session -ScriptBlock {C:\Scripts\Stop_Hyperion.bat}
它执行批处理文件,但批处理文件包含一个名为“超时”的命令,该命令会生成以下错误:
ERROR: Input redirection is not supported, exiting the process immediately.
+ CategoryInfo : NotSpecified: (ERROR: Input re...ss immediately.:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
+ PSComputerName : HYPERIONSERVER1
如果我使用良好的旧 PSExec,除非我对桌面交互会话使用 -i 选项,否则我会收到相同的错误。有没有办法用 PSSession 完成那种交互式会话?
我会修改批处理文件或只是使用 Powershell 命令停止服务,但批处理文件包含对其他批处理文件(也使用超时)的调用,其中包含更多调用。嵌套调用如此之多,以至于要花很长时间才能弄清楚批处理文件在做什么。
【问题讨论】:
-
也许您可以将“超时”替换为不执行任何操作的脚本或模拟可执行文件?
-
不,这不切实际。如果我要修改批处理文件,我会继续编写 powershell 脚本来完成他们正在做的事情。不幸的是批处理脚本并不简单,有很多对其他批处理文件的嵌套调用,其中许多还包含超时命令。
-
@()|C:\Scripts\Stop_Hyperion.bat? -
我并不是要更改批处理文件,因为它们是给定的。我的意思是我能够替换系统上的“timeout.exe”,这样当批处理文件调用 timeout.exe 时,就会调用你的版本。
标签: powershell remoting