在Powershell中远程启动进程,在Windows中获得%ERRORLEVEL%

时间:2011-03-14 14:10:18

标签: powershell wmi win32-process

一些背景知识:

我试图在测试开始时远程启动和停止一些性能计数器,然后在测试结束时停止它们。我是从Win2003机器的自动化测试框架做到这一点,测试框架执行命令而不启动控制台,一些被测系统正在运行Win2008。我编写了脚本来根据分配给服务器的角色选择性能计数器。

我的问题:

  1. logman无法在运行更高版本操作系统的计算机上启动或停止计数器。
  2. psexec可用于远程运行logman,但psexec喜欢在从测试框架运行时间歇性地挂起。它从命令行手动运行。我猜这是因为调用进程不提供控制台或类似的尴尬。我无能为力(GRRRR)
  3. 我编写了一个PowerShell脚本,使用WMI win32_process远程执行logman并从批处理脚本中调用它,这样可以正常工作。但是,测试框架根据%ERRORLEVEL%和stderr的内容决定通过和失败方案,但WMI的win32_process不允许我访问它们。因此,如果计数器无法启动,测试将继续进行,并浪费每个人的时间。
  4. 我正在寻找一种解决方案,允许我在远程机器上执行程序,检查程序的返回代码和/或将stderr管道传回给调用者。为简单起见,需要使用vanilla Win2k3盒子上的工具编写。我真的不想使用一个复杂的脚本集合,将事物转储到日志文件中,然后再将它们读回来。

    有没有人遇到类似的问题,并解决了问题,或者至少有一个建议?

1 个答案:

答案 0 :(得分:9)

  

为简单起见,需要   用可用的工具编写   在一个香草Win2k3盒子上。我真的   不想使用复杂的   转储东西的脚本集合   到日志文件然后读回来   再次出来。

PowerShell不是Windows 2003中的本机工具。您是否仍想标记此问题PowerShell并寻找答案?无论如何,我会给你一个PowerShell答案。

$proc = Invoke-WmiMethod -ComputerName Test -Class Win32_Process -Name Create -ArgumentList "Notepad.exe"
Register-WmiEvent -ComputerName test -Query "Select * from Win32_ProcessStopTrace Where ProcessID=$($proc.ProcessId)" -Action { Write-Host "Process ExitCode: $($event.SourceEventArgs.NewEvent.ExitStatus)" }

这需要在运行这些脚本的系统上使用PowerShell 2.0。您的Windows 2003远程系统并不真正需要PowerShell。

PS:如果你需要关于WMI和PowerShell的速成课程,请阅读我的eGuide:WMI Query Language via PowerShell