在Windows XP中使用prntmngr:
PRNMNGR -l >> C:\printers.txt
在Windows Vista及以后的版本中,使用PowerShell:
get-WmiObject -class Win32_printer | ft name, systemName, shareName >> c:\printers.txt
注意:如果你试图在Vista+上将文件写入C:\,你可能会得到一个错误,这取决于你的权限,以及PowerShell是如何产生的。
对于Windows 2000:
XP中的PlnMngr.vbs文件(位于/Windows/System32文件夹中)在Windows 2000中可以工作。只要找到它并将其从XP机器复制到2000机器上,然后运行它。
cscript prnmngr.vbs -l >> c:\printers.txt
我发现在我的用户桌面上由于某种原因无法运行,但当我把.VBS复制到C的根目录下时,它运行得很好。
我使用的是
wmic printer list brief
OR
wmic printer get name
这只是显示了连接到你运行命令的系统上的打印机的简短列表。如果有网络打印机,它还会显示打印机连接的计算机。
你也可以用它来获取系统上安装的每台打印机的详细配置列表。
wmic printer list full
要将其输出到文本文件,请在命令末尾加上这个。
>>"[directory]\[filename].txt"
示例:
wmic printer list brief >> c:\users\admin\documents\printerlist.txt
``` 。
从Windows 8 / Server 2012开始,有一个get-printer
PowerShell cmdlet。
https://technet.microsoft.com/en-us/library/hh918358%28v=wps.630%29.aspx?f=255&MSPPError=-2147217396
所以这是我的解决方案。
; ******************
;ALLOCATING CONSOLE
; ******************
; cmd calls hidden
global cPid
DetectHiddenWindows, on
Run, %comspec% /k ,,Hide UseErrorLevel,cPid
WinWait, ahk_pid %cPid%,, 1
DllCall("AttachConsole","uint",cPid)
hCon:=DllCall("CreateFile","str","CONOUT$","uint",0xC0000000,"uint",7,"uint",0,"uint",3,"uint",0,"uint",0)
; *******GET PRINTER NAMES**********
AllPrintersNameClearArray := strSplit(StrReplace(StrReplace(StrReplace(StrReplace("|" StrReplace(StrReplace(StrReplace(RunWaitOne("wmic printer get name")," ","")," `r",""),"`r",""),"|NAME`n",""),"`n","|"),"||","",All),"|","`n"),"`n")
RunWaitOne(command) {
objShell := ComObjCreate("WScript.Shell")
objExec := objShell.Exec(command)
strStdOut := ""
while, !objExec.StdOut.AtEndOfStream
strStdOut := objExec.StdOut.ReadAll()
return %strStdOut%
}
; ****Clean at the end*****
Finish:
DllCall("CloseHandle", "uint", hCon)
DllCall("FreeConsole")
Process, Close, %cPid%
ExitApp
return