【问题标题】:Distinguish Windows services with the same ProcessName区分具有相同 ProcessName 的 Windows 服务
【发布时间】:2015-06-08 12:08:14
【问题描述】:

我正在调整一个监控系统来检查服务是否正在运行。它通过检查进程名称及其内存消耗来做到这一点。一旦低于 1 MB,就会触发警报。我还使用内存使用值将其显示在图表中。所以检查和通知并不是唯一的目的。

目前我有 5 个 Windows 服务使用相同的 ProcessName,但我不知道如何让我的脚本区分它们。每个服务的ServiceName 当然不同,可执行文件的路径也不同。 当我运行get-process 时,我看到了所有这些,但我没有看到一个选项来区分它们。使用get-service 也没有多大帮助,因为它返回名称、显示名称和状态。不知何故,我很想组合这些条目以按服务名称而不是进程名称查看内存使用情况。

【问题讨论】:

  • 您需要进行两次查询。看看使用win32_service WMI 对象。这将列出相应的进程名称和服务的 PID,然后您可以在 get-process 命令中使用它们
  • 听起来不错,谢谢arco444

标签: powershell memory windows-services monitoring powershell-3.0


【解决方案1】:

您说可执行文件的路径不同-这样您可以通过查询path属性来区分进程。如果相等,也可以通过查询StartInfo进程的对象来获取Arguments属性来进行区分。但是获得正确流程实例的最佳方法是查询Win32_Service 类型的WMI 对象以过滤掉您的服务,这样您就可以找到其中一个是否也停止了,然后通过传递@987654325 来获取流程@WMI 服务对象的属性。对于正在运行的服务,PID 将是有效的。一个示例(仅按服务名称过滤):

gwmi win32_service | ? {$_.name -eq "wsearch"} | % {get-process -id $_.processid}

请注意,一个进程可能会处理多个服务,这称为“共享服务进程”,在Get-Service 输出中可见,为返回服务的ServiceType 属性,值@987654329 @ (0x20) 表示可以共享底层 PID,尽管并非总是如此。最知名的共享服务进程是svchost.exe,它也有一种命名空间来确定哪个进程应该托管某个服务,并作为命令行参数传递给它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多