怎么判断批处理文件重复起动


PowerShell交流中心怎么判断批处理文件重复起动
0
wangch asked 8年 ago

请问怎么在PowerShell脚本里判断批处理.bat文件是否起动?

如果我先起动cmd终端,在里边敲.\a1.bat的话,
我用 get-process | where {$_.MainWindowTitle -like “*cmd*”} | format-list MainWindowTitle
这个命令能看到这么一行,
MainWindowTitle : 管理者: C:\Windows\system32\cmd.exe – .\a1.bat
但是如果是双击起动的a1.bat,用上边的命令就看不到了,
查看进程的属性里也没有写a1.bat这个名字的地方。

请问怎么才能判断批处理.bat文件是否起动?(而不单是cmd)
最好是PowerShell,批处理脚本也行,看看从哪取。
谢谢!

0 Answers
1
Mooser Lee 管理员 answered 8年 ago

对不起没有别的办法,bat不是可执行文件。双击它也是运行的,只能通过cmd查询。
至于你说的查不到的问题,另当别论了。
要查到,关键有两点:

  1. 给运行bat的cmd窗口一个唯一标识符。
  2. 保证bat脚本没有执行结束。

比如我创建一个test.bat,双击运行。

TITLE www.pstips.net
@echo off
set /p id="Enter ID: "

然后在PowerShell中查询。

PS> Get-Process cmd* | where { $_.MainWindowTitle -eq 'www.pstips.net' }
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
96 7 5460 4596 76 0.02 2304 cmd
wangch replied 8年 ago

我明白了,主要是要给bat个TITLE,非常感谢!!!

wangch replied 8年 ago

不好意思还有问题。其实我的真正需求是bat调ps1,在ps1里判断bat有没有重复起动。刚才试了一下您的方法,确实好用,但如果我在bat里起动ps1,PowerShell.exe -file E:\practise\test5.ps1再就搜不到结果了Get-Process cmd* | where { $_.MainWindowTitle -like ‘*SYNCLIENT*’ }因为MainWindowTitle已经变成”Windows PowerShell”了,有办法解决吗?

Mooser Lee 管理员 replied 8年 ago

继续重写:windows powershell 的title。$Host.UI.RawUI.WindowTitle = “www.pstips.net”

wangch replied 8年 ago

那实际上检查的是ps1有没有重复起动了吧?客户要求的是判断bat文件,还有其他办法吗?比如在bat里起动ps1时的命令不用PowerShell.exe -file E:\practise\test5.ps1,再加点儿参数什么的?

Mooser Lee 管理员 replied 8年 ago

你从bat里面给powershell 传递一个特定的参数,这样就可以基本证明这个powershell是有特定的bat启动的。而且本身即使是在cmd中运行bat,你那样的判断也不是非常准确的。

wangch replied 8年 ago

好的,多谢!