You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell GUI ping工具触发Stop-Job Global:job未定义报错

问题根因

  • 初始定义的$job、$isRunning未显式指定全局作用域,按钮点击事件的脚本块中调用$global:job时无法正确读取到作业对象,触发Stop-Job找不到目标的报错
  • 停止作业后未清理已完成的作业对象,再次触发ping功能时会出现变量值混乱的问题
  • 点击逻辑存在小缺陷:停止作业后按钮文本未重置为初始状态,影响后续操作的可读性
  • 原关闭按钮仅触发作业停止,未添加窗口关闭逻辑,不符合使用预期

修复后的完整代码

Add-Type -AssemblyName System.Windows.Forms, System.Drawing
# 显式声明全局变量,确保事件脚本块可正常读写
$global:job = $null
$global:isRunning = $false

$form = New-Object System.Windows.Forms.Form
$form.Text = 'Clevagroup Pinger'
$form.Size = New-Object System.Drawing.Size(350,150)
$form.StartPosition = 'CenterScreen'
$form.Topmost = $true

$Button = New-Object System.Windows.Forms.Button
$Button.Location = New-Object System.Drawing.Size(35,35)
$Button.Size = New-Object System.Drawing.Size(120,23)
$Button.Text = "Ping"
$Button.Add_Click({
    if($global:isRunning -eq $false){
       $global:job = Start-Job -ScriptBlock {Ping 8.8.8.8 -t > $env:userprofile\desktop\PingResults}
       $Button.Text = "停止Ping"
       $global:isRunning = $true
    } else {
            Stop-Job $global:job 
            # 清理已完成的作业,避免变量残留
            Remove-Job $global:job
            $global:job = $null
            $Button.Text = "Ping"
            $global:isRunning = $false
            # 可选:清理后台残留的ping进程
            # Get-Process ping -ErrorAction SilentlyContinue | Stop-Process
    }
})
$Form.Controls.Add($Button)

$Button1 = New-Object System.Windows.Forms.Button
$Button1.Location = New-Object System.Drawing.Size(195,35)
$Button1.Size = New-Object System.Drawing.Size(120,23)
$Button1.Text = "关闭"
$Button1.Add_Click({
    if($global:job -ne $null){
        Stop-Job $global:job
        Remove-Job $global:job
        # 可选:清理后台残留的ping进程
        # Get-Process ping -ErrorAction SilentlyContinue | Stop-Process
    }
    $form.Close()                    
})
$Form.Controls.Add($Button1)

$form.Add_Shown({$Button.Select()})
$result = $form.ShowDialog()

优化说明

  • 所有变量作用域统一,彻底解决作业找不到的报错
  • 按钮状态切换逻辑清晰,支持多次重复启停ping操作
  • 关闭按钮可正常关闭窗口,作业清理逻辑完整,无后台残留问题
  • 预留了ping进程清理的可选代码,如有需要取消注释即可使用

内容的提问来源于stack exchange,提问作者Harry Goodall

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 23:15:03