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

Gar*_*son 4 powershell wmi win32-process

一点背景:

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

我的问题:

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

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

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

rav*_*nth 9

为简单起见,需要使用vanilla 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)" }
Run Code Online (Sandbox Code Playgroud)

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

PS:如果您需要有关WMI和PowerShell的速成课程,请通过PowerShell阅读我的eGuide:WMI查询语言