区分 Windows 个具有相同 ProcessName 的服务
Distinguish Windows services with the same ProcessName
我正在调整一个监控系统来检查服务是否 运行ning。它通过检查进程名称及其内存消耗来做到这一点。一旦低于 1 MB,就会触发警报。我还使用内存使用值将其显示在图表中。所以检查和通知并不是唯一的目的。
目前我有 5 个 Windows 服务使用相同的 ProcessName
,但我不知道如何让我的脚本区分它们。每个服务的 ServiceName
当然是不同的,可执行文件的路径也是如此。
当我 运行 get-process
时,我看到了所有这些,但是我在这里看不到区分它们的选项。使用 get-service
也没有太大帮助,因为它 returns 名称,显示的名称和状态。不知何故,我很想合并条目以按服务名称而不是进程名称查看内存使用情况。
你说可执行文件的路径不同 - 这样你可以通过查询path
属性来区分进程。如果它们相等,您还可以查询进程的 StartInfo
对象以获得 Arguments
属性 来区分彼此。但是获取正确流程实例的最佳方法是查询 Win32_Service
类型的 WMI 对象以过滤掉您的服务,这样您就可以找到其中一个是否也已停止,然后通过传递ProcessId
属性 WMI 服务对象。对于 运行 服务,PID 将有效。示例(仅按服务名称过滤):
gwmi win32_service | ? {$_.name -eq "wsearch"} | % {get-process -id $_.processid}
请注意,一个进程有可能处理多个服务,这称为 "Shared service process" 并且在 Get-Service
输出中可见 ServiceType
属性 返回的服务,值 Win32SharedProcess
(0x20) 表示可以共享基础 PID,尽管情况并非总是如此。最著名的共享服务进程是 svchost.exe
,它也有一种命名空间来确定哪个进程应该托管某个服务,作为命令行参数传递给它。
我正在调整一个监控系统来检查服务是否 运行ning。它通过检查进程名称及其内存消耗来做到这一点。一旦低于 1 MB,就会触发警报。我还使用内存使用值将其显示在图表中。所以检查和通知并不是唯一的目的。
目前我有 5 个 Windows 服务使用相同的 ProcessName
,但我不知道如何让我的脚本区分它们。每个服务的 ServiceName
当然是不同的,可执行文件的路径也是如此。
当我 运行 get-process
时,我看到了所有这些,但是我在这里看不到区分它们的选项。使用 get-service
也没有太大帮助,因为它 returns 名称,显示的名称和状态。不知何故,我很想合并条目以按服务名称而不是进程名称查看内存使用情况。
你说可执行文件的路径不同 - 这样你可以通过查询path
属性来区分进程。如果它们相等,您还可以查询进程的 StartInfo
对象以获得 Arguments
属性 来区分彼此。但是获取正确流程实例的最佳方法是查询 Win32_Service
类型的 WMI 对象以过滤掉您的服务,这样您就可以找到其中一个是否也已停止,然后通过传递ProcessId
属性 WMI 服务对象。对于 运行 服务,PID 将有效。示例(仅按服务名称过滤):
gwmi win32_service | ? {$_.name -eq "wsearch"} | % {get-process -id $_.processid}
请注意,一个进程有可能处理多个服务,这称为 "Shared service process" 并且在 Get-Service
输出中可见 ServiceType
属性 返回的服务,值 Win32SharedProcess
(0x20) 表示可以共享基础 PID,尽管情况并非总是如此。最著名的共享服务进程是 svchost.exe
,它也有一种命名空间来确定哪个进程应该托管某个服务,作为命令行参数传递给它。