在我的个人电脑中,我有一个工作用的生产力跟踪软件,问题是它即使在办公时间之外也总是在运行,所以我想创建一个 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}