假设我启动了一个powershell脚本并且它在循环中运行。 我打开第二个ps控制台并启动第二个脚本。在这个脚本中,我想检测第一个脚本是否正在运行。 有什么方法可以达到这个目的?
答案 0 :(得分:4)
如果您正在查看打开2个单独的控制台,则需要在脚本中添加一些逻辑,以对文件系统,注册表甚至PowerShell会话的标题栏进行一些更改。然后,您可以在第二个控制台中使用某些逻辑来查找该信息。
我通常使用的另一种方法是使用WMI:
PS>get-wmiobject win32_process|where {$_.name -eq "powershell.exe"}|select-exp commandline
一个例子:
CommandLine : powershell.exe -file "./loop.ps1"
这意味着你需要调用powershell.exe来运行你的脚本。
答案 1 :(得分:0)
当我对本地计算机上的进程感兴趣时,我会使用
get-process *powershell*
我也想获得PowerShell ISE,因此也就是通配符。
答案 2 :(得分:0)
我必须这样做,并编写了一个module,它使用互斥锁将脚本调用限制为单个实例。要使用它,请调用Enter-SingleInstance
函数,如果这是调用它的第一个脚本实例,则返回true
;如果不是第一个实例,则返回false
(默认情况下,它将使用该脚本)标识脚本实例的路径,但是您可以使用自定义标识符,例如GUID。最后,您需要调用Exit-SingleInstance
来释放互斥锁,例如:
if (!(Enter-SingleInstance)) {
throw "The script is already running."
}
else {
try {
# Do what you need to do.
}
finally {
# Make sure you exit single instance on both success and failure.
Exit-SingleInstance
}
}