You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell部署Windows本地打印机自动化执行故障求助

解决PowerShell打印机自动化安装失败的问题

先给你修正后的可运行脚本,再拆解原脚本的问题:

# 检查是否以管理员身份运行,非管理员则重启脚本
$currentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
if (-not $currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
    Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs
    exit
}

# 动态获取当前用户桌面路径,替换硬编码的占位符
$desktopPath = [Environment]::GetFolderPath('Desktop')
# 替换为你实际的安装包文件名(比如gs9.50.exe),禁止用*.exe避免匹配多个文件
$installerPath = Join-Path -Path $desktopPath -ChildPath "gs9.50.exe"

# 运行安装包,强制等待安装完成后再执行后续命令
Start-Process -FilePath $installerPath -ArgumentList "/S /v/qn" -Wait -NoNewWindow

# 添加驱动,加/install参数确保驱动被安装到系统
Pnputil /add-driver "C:\Program Files\gs\gs9.50\lib\*.inf" /install

# 短暂等待驱动生效(部分系统需要这个延迟)
Start-Sleep -Seconds 5

# 检查打印端口是否存在,不存在再添加
if (-not (Get-PrinterPort -Name "File:(print to file)" -ErrorAction SilentlyContinue)) {
    Add-PrinterPort -Name "File:(print to file)"
}

# 检查打印机驱动是否存在,不存在再添加
if (-not (Get-PrinterDriver -Name "NAME PDF" -ErrorAction SilentlyContinue)) {
    Add-PrinterDriver -Name "NAME PDF"
}

# 检查打印机是否存在,不存在再添加
if (-not (Get-Printer -Name "NAME OF PRINTER" -ErrorAction SilentlyContinue)) {
    Add-Printer -Name "NAME OF PRINTER" -PortName "File:(print to file)" -DriverName "NAME PDF"
}

原脚本整合后失效的核心原因

  • 异步执行冲突:原Start-Process没加-Wait参数,安装包在后台运行时,后续命令就已经开始执行,此时Ghostscript的驱动文件还未生成,导致找不到inf文件。
  • 路径硬编码无效:C:\Users\ANYUser\Desktop是占位符,实际运行时需要动态获取当前用户的桌面路径,否则找不到安装包。
  • 通配符风险:*.exe可能匹配桌面上多个可执行文件,必须指定具体的安装包文件名。
  • 权限不足:Pnputil添加驱动、Add-PrinterDriver等操作需要管理员权限,普通用户运行脚本会静默失败。
  • 重复操作报错:如果端口、驱动、打印机已存在,原脚本会报错中断,增加存在判断可避免流程终止。

内容的提问来源于stack exchange,提问作者the1fan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 16:35:06