2014-12-07 59 views
-1

我有一个PowerShell脚本,最终通过invoke-expression命令传递的参数堆栈成一个批处理文件。PowerShell配置强制批处理文件在PowerShell窗口中运行?

然而,一台服务器,当PowerShell脚本执行该批处理文件上,该批处理文件在新窗口中打开,但在其他服务器上,该批处理文件PowerShell窗口中执行。

这是什么意思,我有一个睡眠间隔,一旦批处理文件开始在新窗口中执行时就开始启动,并因此搞砸了我的计时,与其他睡眠间隔时间不同的服务器不同开始,直到后的批处理文件执行完毕。

所以我的问题是...有谁知道为什么行为是两个服务器之间的不同,以及如何让该批处理文件中的PowerShell窗口中执行?我想这是一个配置的事情,但实际上并不能发现什么,告诉我如何让它做我想做的事情.....

谢谢!

- 编辑 -

我目前只是管道线直通这样的: E:\Software\ibm\WebSphere\AppServer\bin\wsadmin -lang jython -username $($username) -password $($password) -f "F:\Custom\dumpAllThreads.py" $($servers)

以前,它

$invokeString = 'E:\Software\ibm\WebSphere\AppServer\bin\wsadmin -lang jython -username $($username) -password $($password) -f "F:\Custom\dumpAllThreads.py" $($servers)' 
$output = invoke-expression $invokeString 

两者都有相同的行为。

+0

您是否在两个系统上使用相同版本的PowerShell? – rrirower 2014-12-08 00:00:57

+0

是的,我是。 :)使用$ PSVersionTable.psversion,我在两个盒子上得到2,0,-1,-1。 – 2014-12-08 00:19:41

+0

尝试使用'start-process'代替,并使用'-nonewwindow'标志 – Paul 2014-12-08 00:21:14

回答

1

所以我的问题是...有谁知道为什么行为是两个服务器

大多数时候我见过这样的事情相关的脚本是如何被调用之间的不同。如果同一用户在同一台​​服务器(即控制台和RDP)上多次登录,则该窗口可能会显示在不同的会话中。同样,如果脚本作为计划任务运行,并且运行该任务的用户不是登录的用户,则该窗口将永远不可见。如果同一个用户登录,它可能是可见的。

如何让批处理文件在powershell窗口中执行?

你可以试试Start-Process-NoNewWindow,就像@Paul提到的那样。

但是....

这也就意味着,一旦该批处理文件开始在新窗口中执行,从而拧紧了我的计时,不像我有一个正在启动休眠间隔另一台服务器,在批处理文件完成执行之后,休眠间隔才开始。

听起来像你的实际问题是你的代码有竞争条件。你应该修复实际的问题。使用Start-Process-Wait参数,或者使用作业系统在PowerShell中。

+0

我使用完全相同的方式在两台服务器上运行完全相同的脚本,这两台服务器使用同一个用户的RDP版本。意图是运行相同的活动3次,休息时间间隔在两者之间。即“让我获得目前的统计数据,等待30秒,再次获得统计数据,等待30秒,再次获得统计数据。”如果我没有选择 - 而且看起来越来越像这样 - 那么我会重新考虑,并希望它能奏效。这是相对直接的改变。对于为什么两台服务器上的相同脚本+触发器导致两种不同行为,这实际上更让我好奇。 – 2014-12-08 02:18:57

相关问题