我需要知道哪个服务执行了同一个脚本中的脚本。
例如服务service_Test执行了测试脚本。从测试脚本中我想知道哪个服务执行了它。
我还没有找到方法来做到这一点,我只能看到哪些服务正在运行。
看起来您要问的是如何确定启动当前 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 类平台。
我有多个服务在某些时候运行相同的脚本。我需要从脚本中知道哪个 Windows 服务正在运行它。
示例 服务1 服务2
两者都调用脚本Test.p1,我需要从脚本test.ps1知道哪个服务正在执行它。
我已经尝试过了,但它告诉我是 powershell 正在运行它。
$service_name = (Get-WmiObject Win32_Service -Filter "ProcessId='$PID'").Name
我想我必须知道谁是powershell的父级,因为该服务运行“powershell test.ps1”,所以它说它是powershell运行它。