用于浏览器进程管理的PowerShell One Liner中的错误

时间:2019-05-24 09:16:34

标签: powershell

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

我的代码在未打开Edge的情况下工作良好,在if条件下可以正常运行,但是在Edge条件下打开它会在else条件下返回错误。

系统是带有PowerShell ISE的Windows 10。

get_sentence_vector

我需要运行监视窗口,并在打开Microsoft Edge时关闭其他浏览器,例如chrome或其他进程名称。

1 个答案:

答案 0 :(得分:0)

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

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

但是,这样做。您拥有的方式是一种选择。在ISE中进行开发,保存文件, 直接从控制台运行或从ISE对其进行操作。

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

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中的consolehost实例测试代码,而无需在控制台中键入。

Start-Process powershell -ArgumentList "-NoExit","-Command  &{ $Code }" -Wait

Start-Process pwsh -ArgumentList "-NoExit","-Command  &{ $Code }" -Wait

或者只需打开consolehost并运行脚本

以上方法是根据您定义的情况设计的。

我在这里也同意Olaf的观点,您需要添加更多的错误检查来确定什么正在运行以及没有在运行,以使其在操作上更加合理。如果目标不存在,请不要运行不需要运行的代码。