PowerShell脚本等待打印输出,直到我按下button

我写了一个PS1脚本,它将计算在Citrix场中运行多less个进程(在本例中为MS Project)。

代码是:

$variable=(query farm /process | where { $_.Contains("WINPROJ") } | measure ).count echo $variable 

如果我从powershell执行PS1,它的工作原理是完美的,但如果我使用powershell.exe文件“C:\ foo \ countProcessProject.ps1”或powershell.exe -c“C:\ foo \ countProcessProject.ps1“脚本将停止,直到我多次按下button,输出variables。

我比较了CMD和PS执行的环境variables,几乎相同。

映入眼帘,

您可能能够强制它使用-NonInteractive参数返回:

 PowerShell.exe -File "C:\foo\countProcessProject.ps1" -NonInteractive 

虽然我没有深入的解释,为什么这是必要的,这里是我将如何解决这个问题:

没有PowerShell:

如果你坚持使用query farm的考古gem,那么可以单独使用cmd来完成 – 不需要把一个简单的任务复杂化:

 query farm /process |find /i "winproj" /c 

这将以与当前的powershell调用语句相同的方式输出数字“winproj”进程

仅使用PowerShell:

如果您希望转向更加以PowerShell为中心的解决scheme,则可以使用Citrix官方XenApp PowerShell SDK中包含的PS Snapins:

 Add-PSSnapin Citrix.XenApp.Commands $FarmProcs = Get-XAServer -OnlineOnly | Get-XASessionProcess $MSProjProcs = $FarmProcs | Where {ProcessName -match "winproj"} | Measure-Object return $MSProjProcs.Count 

我将首先尝试把这个:

 PowerShell.exe -file "C:\foo\countProcessProject.ps1" 

在一个batch file,然后创build一个计划任务运行这个批处理,将运行您的Powershell脚本。

假设你还没有试过这个。

当你使用start / b命令在cmd控制台中产生powershell时,它是否工作?

 start /b /wait Powershell.exe -file "C:\foo\countProcessProject.ps1" 

您可以确认您在脚本启用点击暂停期间没有点击屏幕上的任何地方,如此处所述。

我还在学习PowerScript,并没有上面的评论,但一直在看这个,有一些问题。 希望你能放纵我。

首先,我可以创build一个简单的testing文件,并像这样从cmd运行它:

 $v = (dir | Where-Object { $_.name.Contains("test") } | measure).count echo $v 

我用CMD运行这个:

 powershell -file test.ps1 

它需要一些时间,然后返回1,因为我的文件是test.ps1


什么是“查询农场/进程”? 这是外部命令吗? 它又回来了什么? 我认为后面的pipe道正在等待一个数组,不是吗? 我想知道从cmd运行时会发生什么错误。 我知道,一个2>命令行后缀null将干净地摆脱任何错误。