检查PowerShell脚本是否正在使用批处理脚本运行

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

我正在使用这样的批处理文件运行Powershell脚本:

@ECHO OFF
PowerShell.exe -Command "& 'U:\...\...\..._PS.ps1'"
PAUSE

此.ps1脚本可能需要15分钟才能运行。在这段时间内,我想避免再次运行此脚本。如果用户运行.bat文件,我希望控制台打印出类似“ Powershell脚本已在运行,请等到结束”之类的内容。

从各种示例中,我已经看到了这段代码:

echo off
tasklist /fi "imagename eq powershell.exe" |find ":" > nul
if errorlevel 1 taskkill /f /im "powershell.exe"
exit

有两个问题:1.它仅适用于.exe文件,例如记事本,powershell等...我具有.ps1的路径2.它杀死了任务,我只需要显示一条消息

powershell batch-file process ps1
1个回答
0
投票

如果坚持使用-Command参数,您可以执行以下操作:

powershell.exe -Command "if (((Get-CimInstance Win32_Process -Filter \"name = 'powershell.exe'\").CommandLine -match '..._PS\.ps1').Count -gt 1) {'Powershell is already running.'} else {& 'U:\...\...\..._PS.ps1'}"

想法是检查当前正在运行的Win32_Process项目,这些项目的命令行包含..._PS.ps1文件。由于检查命令将在检查条件之前将自身添加到堆栈中,因此您必须检查1次以上的事件。使用.运算符时,任何文字-match字符都需要反斜杠转义,因为-match使用正则表达式。请注意内部双引号的反斜杠转义,因为您是从CMD Shell运行的。从PowerShell运行此命令将需要不同的转义符。

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