首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于浏览器进程管理的PowerShell one liner出错

用于浏览器进程管理的PowerShell one liner出错
EN

Stack Overflow用户
提问于 2019-05-24 17:16:34
回答 1查看 463关注 0票数 0

我正在尝试在一行代码中运行PowerShell。这段代码是一个用于监视的循环。如果打开了Microsoft Edge,则该进程必须关闭Chrome。

我的代码如果Edge没有打开,它工作得很好,它直接遵循if条件,但是如果Edge打开了,它会在else条件中返回一个错误。

系统是安装了PowerShell ISE的Windows10。

$a = 1 ;DO { 'Starting Loop' ; $vischk = get-process | where-object {$_.mainwindowhandle -ne 0 -and $_.MainWindowTitle -eq 'Start - Microsoft Edge'} | select-object name, mainwindowtitle ; if (!($vischk)) {Write-Warning 'Microsoft Edge is off'}else{Write-Warning 'Closing Chrome' Stop-Process -name chrome} ; Write-Warning 'Active surveillance' ; Start-Sleep -s 15} While ($a -le 2)

我需要运行监视窗口,当Microsoft Edge打开时,关闭另一个浏览器,如chrome或另一个进程名称。

EN

回答 1

Stack Overflow用户

发布于 2019-05-25 01:51:42

这也不是一行,它是一个很长的脚本,全部放在一行上。;-},因此使用分号。分号表示它之前和之后是独立的代码块。

我在交互式控制台主机中得到了这个用例,但在脚本中,这是完全不同的事情。

然而,这样做。你拥有它的方式是一种选择。在ISE中开发,保存文件,直接从控制台运行或从ISE外壳到该文件。

此外,您检查MS Edge实例的方式也不正确。MainWindowTitle仅为“Microsoft Edge”

代码语言:javascript
运行
复制
Get-Process -Name MicrosoftEdge | select *

<#
Name                       : MicrosoftEdge
Id                         : 6388
PriorityClass              : Normal
...
ProductVersion             : 11.00.17763.529
Description                : Microsoft Edge
Product                    : Microsoft Edge
__NounName                 : Process
...
SafeHandle                 : Microsoft.Win32.SafeHandles.SafeProcessHandle
MachineName                : .
MainWindowHandle           : 132100
MainWindowTitle            : Microsoft Edge
MainModule                 : System.Diagnostics.ProcessModule (MicrosoftEdge.exe)
MaxWorkingSet              : 1413120
MinWorkingSet              : 204800
Modules                    : {System....
#>

$Code = @'
$a = 1 
DO { 
    'Starting Loop' 

    $vischk = get-process | 
    where-object {
    $_.mainwindowhandle -ne 0 -and 
    $_.MainWindowTitle -eq 'Microsoft Edge'
    } | select-object name, mainwindowtitle 

    if (!($vischk))
    {Write-Warning 'Microsoft Edge is off'}
    else{
        Write-Warning 'Closing Chrome' 
        Stop-Process -name chrome
    } 

    Write-Warning 'Active surveillance' 
    Start-Sleep -s 3} 
While ($a -le 2)
'@

您可以留在ISE中测试代码,但正如Olaf指出的那样,您的用户可能不同。因此,您需要验证这两个环境。您可以留在ISE中并在那里和控制台主机中测试代码。

因此,要使用来自ISE/VSCode的控制台主机实例测试代码,而无需在控制台中键入内容。

代码语言:javascript
运行
复制
Start-Process powershell -ArgumentList "-NoExit","-Command  &{ $Code }" -Wait

代码语言:javascript
运行
复制
Start-Process pwsh -ArgumentList "-NoExit","-Command  &{ $Code }" -Wait

或者只需打开控制台主机并运行脚本

上面的工作是根据您定义的用例来设计的。

我在这里也同意Olaf的观点,你需要添加更多的错误检查来检查什么是运行的,什么没有运行,这样才能更好地操作。如果目标不存在,不要运行不需要运行的代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56289475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档