4

一点背景:

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

我的问题:

  1. logman无法在运行更高版本操作系统的机器上启动或停止计数器。
  2. psexec可用于远程运行 logman,但 psexec 在从测试框架运行时喜欢间歇性挂起。它可以从命令行手动运行。我猜这是因为调用进程没有提供控制台,或者类似的尴尬。我对此无能为力(GRRRR)
  3. 我编写了一个 PowerShell 脚本,它使用 WMI 远程执行 logmanwin32_process并从批处理脚本中调用它,这很好。%ERRORLEVEL%但是,测试框架根据stderr 的内容决定通过和失败的场景,但 WMIwin32_process并没有让我访问任何一个。因此,如果计数器无法启动,无论如何测试都会继续进行,浪费大家的时间。

我正在寻找一种解决方案,允许我在远程机器上执行程序,检查程序的返回代码和/或将 stderr 管道返回给调用者。为简单起见,它需要用普通 Win2k3 盒子上可用的工具编写。我真的不想使用复杂的脚本集合,将内容转储到日志文件中,然后再次将它们读回。

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

4

1 回答 1

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 速成课程,请阅读我的电子指南:WMI Query Language via PowerShell

于 2011-03-14T15:06:48.993 回答