识别与生产力跟踪软件相关的流程并启动和停止它们

识别与生产力跟踪软件相关的流程并启动和停止它们

在我的个人电脑中,我有一个工作用的生产力跟踪软件,问题是它即使在办公时间之外也总是在运行,所以我想创建一个 powershell 脚本,以便我可以在办公时间启动和停止该软件。

所以我认为我需要识别与该软件相关的所有进程,然后创建一个脚本来停止和启动这些进程。

您会推荐什么方法?

我正在使用这个脚本,但我也可以让它工作

@echo off
$p = Get-Process -Name "notepad.exe"
Stop-Process -InputObject $p
Get-Process | Where-Object {$_.HasExited}

答案1

首先...

@echo off`

...不是 PowerShell 将执行的东西,因为那是一个批处理文件。

# Results
<#
 @echo off
At line:1 char:7
+ @echo off
+       ~~~
Unexpected token 'off' in expression or statement.
At line:1 char:1
+ @echo off
+ ~~~~~
The splatting operator '@' cannot be used to reference variables in an expression. '@echo' can be used only as an argument to a command. To reference variables in an expression use '$echo'.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : UnexpectedToken
#>

至于其他命令,您需要在 PowerShell 主机中才能运行这些命令,而且您根本没有显示自己正在启动 PowerShell。用于停止现有的正在运行的进程。

您只需一行即可完成此操作。

Stop-Process -Name 'notepad' -Force

启动一个进程就这么简单。

如果您说您有多个同名的正在运行的进程,那么您必须在启动时捕获该进程。但是,您没有这样做吗?您打算如何知道应该取消哪个确切名称的进程?

您必须查看同名进程的其他属性才能找到需要终止的唯一进程。例如其完整窗口标题等。

$ProcessTarget = Start-Process -FilePath 'notepad.exe' -PassThru

Stop-Process $ProcessTarget.Id -Force

try   {(Get-Process $ProcessTarget.Id -ErrorAction SilentlyContinue).HasExited} 
Catch {$ProcessTarget.HasExited}

相关内容