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

PowerShell GUI脚本问题:双击ListBox删打印机后无法弹出提示窗口

PowerShell打印机移除GUI脚本问题修复

关于脚本称呼的说明

你所说的「PowerShell GUI脚本」这个称呼完全准确,因为你基于System.Windows.Forms组件构建图形交互界面,属于典型的PowerShell桌面GUI开发场景。

问题根源

你的双击事件仅执行了打印机删除操作,缺少关闭主窗口和显示提示窗口的逻辑;同时提示窗口$window2没有添加任何用于显示文本的控件(比如Label),即便强制显示也看不到预期提示内容。

修复后的完整代码

# 确保加载Windows Forms程序集,避免环境缺失导致异常
Add-Type -AssemblyName System.Windows.Forms

# 主窗口配置
$window = New-Object Windows.Forms.Form
$window.Text = "Choose a printer to remove"
$window.Size = New-Object Drawing.Size(440,240)
$window.StartPosition = "CenterScreen"
$window.TopMost = $true

# 提示窗口配置(添加文本标签与确认按钮)
$window2 = New-Object Windows.Forms.Form
$window2.Text = "操作完成"
$window2.Size = New-Object Drawing.Size(300,150)
$window2.StartPosition = "CenterScreen"
$window2.TopMost = $true

# 提示文本标签
$promptLabel = New-Object Windows.Forms.Label
$promptLabel.Text = "Your printer has been removed"
$promptLabel.AutoSize = $true
$promptLabel.Location = New-Object Drawing.Point(50,50)
$window2.Controls.Add($promptLabel)

# 确认按钮(点击关闭提示窗口)
$okButton = New-Object Windows.Forms.Button
$okButton.Text = "确定"
$okButton.Location = New-Object Drawing.Point(100,80)
$okButton.Add_Click({ $window2.Close() })
$window2.Controls.Add($okButton)

# 打印机列表框配置
$listbox = New-Object Windows.Forms.ListBox
$listbox.Location = New-Object Drawing.Point(10,10)
$listbox.Size = New-Object Drawing.Size(370,180)
$window.Controls.Add($listbox)

# 加载并填充打印机列表
Get-Printer | Sort-Object Name | ForEach-Object { $listBox.Items.Add($_.Name) } | Out-Null

# 完善双击事件逻辑
$listbox.Add_DoubleClick({
    # 先判断是否选中有效项
    if ($listbox.SelectedItem) {
        try {
            # 执行打印机删除(强制捕获错误)
            Remove-Printer -Name $listbox.SelectedItem -ErrorAction Stop
            # 关闭主窗口
            $window.Close()
            # 显示提示窗口
            $window2.ShowDialog()
        }
        catch {
            # 删除失败时弹出错误提示
            [Windows.Forms.MessageBox]::Show("删除打印机失败:$($_.Exception.Message)", "错误", [Windows.Forms.MessageBoxButtons]::OK, [Windows.Forms.MessageBoxIcon]::Error)
        }
    }
})

# 启动主窗口
$window.ShowDialog()

关键修改点说明

  • 增加Add-Type -AssemblyName System.Windows.Forms:确保Windows Forms组件被正确加载,兼容不同PowerShell环境
  • 给提示窗口添加文本标签与确认按钮:让提示内容可见,且支持手动关闭
  • 完善双击事件:
    • 增加选中项校验,避免空选时执行删除操作报错
    • 用try-catch捕获删除异常,给出明确错误提示
    • 删除成功后自动关闭主窗口并弹出提示窗口

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:05:23