请问怎么在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,批处理脚本也行,看看从哪取。
谢谢!
对不起没有别的办法,bat不是可执行文件。双击它也是运行的,只能通过cmd查询。
至于你说的查不到的问题,另当别论了。
要查到,关键有两点:
- 给运行bat的cmd窗口一个唯一标识符。
- 保证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
我明白了,主要是要给bat个TITLE,非常感谢!!!
不好意思还有问题。其实我的真正需求是bat调ps1,在ps1里判断bat有没有重复起动。刚才试了一下您的方法,确实好用,但如果我在bat里起动ps1,PowerShell.exe -file E:\practise\test5.ps1再就搜不到结果了Get-Process cmd* | where { $_.MainWindowTitle -like ‘*SYNCLIENT*’ }因为MainWindowTitle已经变成”Windows PowerShell”了,有办法解决吗?
继续重写:windows powershell 的title。$Host.UI.RawUI.WindowTitle = “www.pstips.net”
那实际上检查的是ps1有没有重复起动了吧?客户要求的是判断bat文件,还有其他办法吗?比如在bat里起动ps1时的命令不用PowerShell.exe -file E:\practise\test5.ps1,再加点儿参数什么的?
你从bat里面给powershell 传递一个特定的参数,这样就可以基本证明这个powershell是有特定的bat启动的。而且本身即使是在cmd中运行bat,你那样的判断也不是非常准确的。
好的,多谢!