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
相关产品推荐
相关产品推荐

