我需要知道哪个服务执行了脚本,到powershell

问题描述 投票:0回答:2

我需要知道哪个服务执行了同一个脚本中的脚本。

例如服务service_Test执行了测试脚本。从测试脚本中我想知道哪个服务执行了它。

我还没有找到方法来做到这一点,我只能看到哪些服务正在运行。

powershell service process startup running-count
2个回答
2
投票

看起来您要问的是如何确定启动当前 PowerShell 进程的可执行文件的路径,以便您可以将其与服务可执行文件路径进行比较。

您可以将

Get-Process
Get-CimInstance
Win32_Process
WMI 类结合使用,使用 自动
$PID
变量
来获取当前进程的 ID:

$parentExecutablePath = 
  (Get-Process -Id `
    (Get-CimInstance Win32_Process -Filter "ProcessId = $PID").ParentProcessId
  ).Path

PowerShell (Core) 7+ 中,解决方案可以简化,因为 PowerShell 现在使用 System.Diagnostics.Process

 属性装饰 
Get-Process
 实例输出的 
.Parent

# PS v7+ - also works on Unix-like platforms.
$parentExecutablePath =
  (Get-Process -Id $PID).Parent.Path

这不仅更简单、更短,而且还适用于 Unix 类平台。


0
投票

我有多个服务在某些时候运行相同的脚本。我需要从脚本中知道哪个 Windows 服务正在运行它。

示例 服务1 服务2

两者都调用脚本Test.p1,我需要从脚本test.ps1知道哪个服务正在执行它。

我已经尝试过了,但它告诉我是 powershell 正在运行它。

$service_name = (Get-WmiObject Win32_Service -Filter "ProcessId='$PID'").Name

我想我必须知道谁是powershell的父级,因为该服务运行“powershell test.ps1”,所以它说它是powershell运行它。

© www.soinside.com 2019 - 2024. All rights reserved.