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
相关产品推荐
相关产品推荐

