在需要交互/重定向的远程Powershell会话中执行批处理

时间:2016-07-27 15:38:25

标签: powershell remoting

我的公司使用名为“Hyperion”的基于Oracle的产品。我相信Oracle聘请了一些高中生来编写批处理文件来启动和停止服务。我遇到的问题是我想使用Powershell Remoting来执行一个名为“Stop_Hyperion.bat”的批处理文件,该文件由Oracle提供,用于以受控方式停止多个进程和服务。不幸的是,这不起作用:

$Session = New-PSSession -ComputerName HyperionServer1 -Credential $PSCredential
Invoke-Command -Session $Session -ScriptBlock {C:\Scripts\Stop_Hyperion.bat}

它执行批处理文件,但批处理文件包含一个名为“Timeout”的命令,它会生成以下错误:

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命令停止服务,但批处理文件包含对其他批处理文件(也使用超时)的调用,其中包含更多调用。有这么多嵌套调用需要花费很长时间才能完全解开批处理文件正在做什么。

1 个答案:

答案 0 :(得分:0)

您可以查看批处理文件,并创建一个本机PowerShell实现作为替代。

'Stop-Service'和'Start-Service'是Windows上可用的标准cmdlet。

这可能会忽略提供的批处理文件中的一些复杂性,但如果它完成了工作,就足够了。这与从服务管理器停止和启动服务相同。