You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

PowerShell脚本求助:实现记事本运行时长统计功能失败

解决PowerShell点标记脚本的记事本启停与时长统计问题

我来帮你搞定这个PowerShell脚本问题!先给你一个能用的完整版本,再拆解细节,顺便说说你可能踩的坑:

# 记录记事本启动的初始时间
$startTime = Get-Date

# 启动记事本,通过-PassThru参数拿到进程对象,方便后续用点标记操作
$notepadProcess = Start-Process notepad -PassThru

# 让记事本运行指定秒数(这里设为5秒,你可以按需修改)
Start-Sleep -Seconds 5

# 用点标记调用进程对象的Kill方法,直接关闭记事本
$notepadProcess.Kill()

# 等待进程完全退出,避免计算时长时出现偏差
$notepadProcess.WaitForExit()

# 计算运行时长:用当前时间减去启动时间,通过点标记获取时间差的TotalSeconds属性
$runDuration = (Get-Date).Subtract($startTime).TotalSeconds

# 输出格式化后的运行时长,保留两位小数
Write-Host "记事本运行时长: $([math]::Round($runDuration, 2)) 秒"

关键细节拆解

  • 获取进程对象是核心Start-Process-PassThru参数必须加,它会返回刚启动的记事本进程对象,这样你才能用点标记直接调用它的方法(比如Kill())和属性。如果没加这个参数,$notepadProcess会是空值,后续所有点标记操作都会报错。
  • 点标记的正确用法
    • 调用方法要加括号:比如$notepadProcess.Kill(),不是$notepadProcess.Kill(后者只会返回方法对象,不会执行关闭操作)
    • 访问属性直接用点:比如时间差的TotalSeconds属性,直接通过.TotalSeconds获取总秒数
  • 确保进程完全终止WaitForExit()会等待进程彻底退出后再继续执行,避免计算时长时,进程还在关闭中导致时间统计不准。

你可能遇到的常见问题

  1. 无法定位进程:如果没加-PassThru,根本拿不到目标进程对象,自然无法关闭和统计
  2. 点标记语法错误:比如调用方法忘加括号,或者属性名拼写错误(比如把TotalSeconds写成TotalSecond
  3. 时长统计偏差:没等进程退出就计算时间,导致统计结果比实际运行时间长

内容的提问来源于stack exchange,提问作者Ruairi Carroll

火山引擎 最新活动