无法使用 PRNMNGR 删除带撇号 (') 的打印机

Unable to Delete Printer w/ Apostrophe (') Using PRNMNGR

我有一台名为“Teacher's Lounge Printer”的打印机(注意撇号)

在标准 Windows 7 命令提示符下执行以下命令时,出现“Error 0x8004103A Invalid object path”。

cscript "%WINDIR%\System32\Printing_Admin_Scripts\en-US\prnmngr.vbs" -d -p "Teacher's Lounge Printer"

如果我将打印机重命名为“Teachers Lounge Printer(不带撇号),不带撇号的命令将成功执行。

cscript "%WINDIR%\System32\Printing_Admin_Scripts\en-US\prnmngr.vbs" -d -p "Teachers Lounge Printer"

我觉得我已经尝试了双引号、单引号的所有组合,甚至尝试过转义字符。

最终,这会变成我正在编写的批处理脚本,但我首先需要让各个命令正常工作。

我知道我做错了什么,感谢您的帮助。

Microsoft 的 prnmngr.vbs 脚本使用 WMI 来提供基础功能。

WMI 接受使用单 ' 引号或双 " 引号引起来的字符串。不幸的是 prnmngr.vbs 的开发者选择在两个地方使用单引号,当打印机名称包含单引号(撇号)时会导致问题。

我还没有找到以 WMI 接受的方式转义 prnmnger.vbs 参数中的 ' 的方法。但我已经想出如何破解(调试)Microsoft prnmngr.vbs 代码来消除问题。

在我的机器上,在第 462 行和第 818 行有两条相同的违规行。

        set oPrinter = oService.Get("Win32_Printer.DeviceID='" & strPrinter & "'")

可以通过在 WMI 查询字符串中切换为使用双引号来修复该错误。由于双引号文字在 VBS 引用字符串中,引号必须转义为 "".

        set oPrinter = oService.Get("Win32_Printer.DeviceID=""" & strPrinter & """")

与其修改原始的 Microsoft 文件,不如将文件复制到不同的文件夹,并在其中进行更改,运行 破解版本而不是 Microsoft 原始文件。