C#开发打印机安装GUI调用PowerShell时出现Add命令未识别错误
问题根因
你调用PowerShell命令的写法存在两处核心错误,直接触发了报错:
- PowerShell中添加打印机端口的完整cmdlet是
Add-PrinterPort,添加打印机的完整cmdlet是Add-Printer,你错误把完整命令拆成了Add作为命令名,把PrinterPort/Printer当成了独立参数,系统找不到Add这个独立命令就会抛出匹配的异常。 - 参数名也被错误拆分,比如
-Name是完整参数名,你拆成了-和Name两个独立参数,完全不符合PowerShell的参数传递规则。
修正后的代码
你可以将ekle_Click方法的逻辑替换为以下内容,同时增加了错误捕获逻辑方便后续排查问题:
private void ekle_Click(object sender, EventArgs e) { // 这里请替换为你实际的输入控件取值逻辑,给打印机IP、名称赋值 string printer_ip = txtPrinterIp.Text.Trim(); string printer_name = txtPrinterName.Text.Trim(); // 第一步:添加打印机端口 using (PowerShell powershell = PowerShell.Create()) { powershell.AddCommand("Add-PrinterPort"); powershell.AddParameter("Name", printer_ip); powershell.AddParameter("PrinterHostAddress", printer_ip); var results = powershell.Invoke(); if (powershell.HadErrors) { foreach (var error in powershell.Streams.Error) { MessageBox.Show($"添加端口失败:{error.ToString()}"); return; } } } // 第二步:添加打印机 using (PowerShell powershell = PowerShell.Create()) { powershell.AddCommand("Add-Printer"); powershell.AddParameter("Name", printer_name); powershell.AddParameter("PortName", printer_ip); powershell.AddParameter("DriverName", "Canon Generic Plus PCL6"); var results = powershell.Invoke(); if (powershell.HadErrors) { foreach (var error in powershell.Streams.Error) { MessageBox.Show($"添加打印机失败:{error.ToString()}"); return; } } } MessageBox.Show("Success!"); }
补充注意事项
- 程序运行时需要管理员权限,添加打印机端口、安装打印机属于系统级操作,普通用户权限会被拦截
- 提前确认目标设备已经安装了
Canon Generic Plus PCL6驱动,否则打印机会添加失败 - 确保项目已经正确引用
System.Management.Automation程序集
内容的提问来源于stack exchange,提问作者rockatt
相关产品推荐
相关产品推荐

