加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-14 02:07:35 所属栏目:Windows 来源:网络整理
导读:一点背景: 我试图在测试开始时远程启动和停止一些性能计数器,然后在测试结束时停止它们.我是从Win2003机器的自动化测试框架做到这一点,测试框架执行命令而不启动控制台,一些被测系统正在运行Win2008.我编写了脚本来根据分配给服务器的角色选择性能计数器.
一点背景:

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

我的问题:

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

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

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

解决方法

For reasons of simplicity,it needs to
be written in tools that are available
on a vanilla Win2k3 box. I’d really
prefer not to use a convoluted
collection of scripts that dump things
into log files then reading them back
out again.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读