Windows

無法在 2012 R2 列印伺服器上使用 Add-PrinterDriver 添加列印機驅動程序

  • November 26, 2020

我正在嘗試將 Windows Server 2012 R2 主機設置為列印伺服器。我正處於嘗試將列印機添加到系統的早期階段。我試圖盡可能地將其保留為基於 PowerShell,但我也使用了普通的舊 .exe 實用程序(特別是由於 .exe 中的缺點Add-WindowsDriver)。真的,我正在盡力避免使用 GUI。

Powershell 版本是 5.1。

到目前為止,我已經執行了以下步驟來嘗試安裝列印機:

  1. 將 .inf、.cat 和 .cab 文件複製到伺服器
  2. 為列印機添加了一個列印機埠:Add-PrinterPort -Name "TCP/IP_CanonIR" -PrinterHostAddress 10.0.0.60 -PortNumber 9100
  3. 將列印機驅動程序添加到 Windows 驅動程序商店:pnputil.exe /a C:\PrintDrivers\Canon\Driver\driver.inf

這是我卡住的地方。我似乎無法使用Add-PrinterDriver. 我通過Google搜尋了解到我首先需要將驅動程序添加到 WDS(我現在已經完成了pnputil.exe),但我似乎仍然無法添加它。我跑了Get-WindowsDriver,我看到它回來了。根據OriginalFileName返回對象的屬性,我知道 .inf 文件在驅動程序儲存中的位置。所以,我執行以下命令:

Add-PrinterDriver -Name "Canon imageRUNNER ADVANCE" -InfPath "C:\Windows\System32\DriverStore\FileRepository\cns30ma64.inf_amd64_3fa1ebf9a5a06bfe\cns30ma64.inf"

返回的是:

Add-PrinterDriver : The specified driver does not exist in the driver store.
+ CategoryInfo          : NotSpecified: (MSFT_PrinterDriver:ROOT/StandardCimv2/MSFT_PrinterDriver) [Add-PrinterDriver], CimException
+ FullyQualifiedErrorId : HRESULT 0x80070705,Add-PrinterDriver

我還嘗試將Driver返回的屬性的值指定Get-WindowsDriver為提供的值-Name

Add-PrinterDriver -Name "oem13.inf" -InfPath "C:\Windows\System32\DriverStore\FileRepository\cns30ma64.inf_amd64_3fa1ebf9a5a06bfe\cns30ma64.inf"

這將返回相同的錯誤。我已經閱讀了幫助Add-PrinterDriver,它不是很有幫助。我知道該-InfPath值是有效的,因為這是從Get-WindowsDriver. 我要指定的唯一另一件事是-Name. 從幫助:

-Name <String>
   Specifies the name of the printer driver.

對我來說,這聽起來像是我可以隨意命名它,所以我看不到那裡有問題。這裡所做的一切都在提升的 shell 中執行,因此訪問驅動程序儲存的內容應該不是問題。

有人在這裡有什麼建議嗎?我會以錯誤的方式解決這個問題嗎?如果我可以提供任何其他相關資訊,請告訴我。

好吧,我想通了。使用該-Name參數,您需要根據 .inf 文件中的可用名稱為該驅動程序指定一個有效名稱。這是在安裝列印機時手動選擇驅動程序時顯示的名稱。因此,例如,如果您想為佳能列印機添加列印機驅動程序:

# Add driver to Windows Driver Store
pnputil.exe /a C:\Path\To\driver.inf

# Find driver full path
Get-WindowsDriver -All -Online | Where-Object {$_.OriginalFileName -like '*driver.inf'} | Select-Object -ExpandProperty OriginalFileName -OutVariable infPath
# Make sure that driver.inf matches the original driver .inf file you supplied

# Get valid driver names from inf file
Get-Content -Path $infPath

# Near the top of the previous output, you should see a list of driver name to model name mappings that looks like this:
;64-bit x64
[Canon.NTamd64]
"Canon Generic Plus PS3" = GENERICPS,,1284_CID_CA_PS3_COLOR_OIP

# Based on the model on the right, since I know that is the model I have I will use that driver name:
Add-PrinterDriver -Name "Canon Generic Plus PS3" -InfPath $infPath

# You're done. Now you can run Get-PrinterDriver to be sure that it is available:
Get-PrinterDriver

Name                    PrinterEnvironment MajorVersion Manufacturer
----                    ------------------ ------------ ------------
Canon Generic Plus PS3  Windows x64        3            Canon

# You can then begin to install your printers using your newly added printer driver:
Add-Printer -DriverName "Canon Generic Plus PS3" -Location "Customer Service Department" -Shared -ShareName "Canon IR-ADV in Customer Service" -Name "Canon IR-ADV in Customer Service" -Published -PortName "TCP_10.0.0.60"
# Be sure you have already configured a printer port for the printer using the Add-PrinterPort cmdlet, and use that in the above command

引用自:https://serverfault.com/questions/968120