如何创建多打印服务器网络打印机映射脚本?PowerShell脚本报错求助
解决PowerShell安装网络打印机的错误及通用脚本创建方法
现有脚本的错误修复
你的脚本核心问题有两个:
- 网络路径格式错误:打印机共享路径需要以双反斜杠
\\开头,而你定义的$FullServerName只有单个反斜杠,导致路径无效。 - 属性解析错误:在字符串中直接使用
$Printer.Name时,PowerShell会将$Printer解析为对象,然后把.Name当成普通字符串拼接,而非提取对象的Name属性,需要用子表达式$()包裹属性访问。
修改后的完整脚本:
# 获取服务器名称 $Server = Read-Host "Enter name of Server" # 构建正确的服务器共享前缀(双反斜杠) $FullServerPrefix = "\\$Server" # 初始化序号,获取打印机列表并添加序号列 $i = 0 $printers = Get-Printer -ComputerName $Server | Select-Object @{Name="Item";Expression={$i++}}, Name # 格式化输出列表 $printers | Format-Table -AutoSize # 获取用户选择并验证输入 do { $selectedNumber = Read-Host "Select Printer to install by typing the number" # 验证输入是否为有效整数 if (-not [int]::TryParse($selectedNumber, [ref]$null)) { Write-Host "请输入有效的数字序号!" } } while (-not [int]::TryParse($selectedNumber, [ref]$null)) # 匹配选中的打印机 $selectedPrinter = $printers | Where-Object {$_.Item -eq [int]$selectedNumber} if ($selectedPrinter) { # 构建完整的打印机共享路径,用子表达式正确提取打印机名称 $printerPath = "$FullServerPrefix\$($selectedPrinter.Name)" try { Add-Printer -ConnectionName $printerPath Write-Host "打印机 '$($selectedPrinter.Name)' 安装成功!" } catch { Write-Host "安装失败:$($_.Exception.Message)" } } else { Write-Host "未找到对应序号的打印机!" }
关键修改说明
- 移除全局变量:改用局部变量避免全局环境污染,代码更安全。
- 修正路径前缀:
\\$Server符合Windows网络共享的路径规范。 - 属性解析修正:
$($selectedPrinter.Name)确保PowerShell正确解析对象的Name属性。 - 输入验证:添加循环验证用户输入是否为有效整数,避免无效输入导致的错误。
- 错误处理:用
try/catch捕获安装过程中的异常,给出明确的错误提示。
创建映射不同打印服务器网络打印机的通用脚本
核心步骤
- 获取打印服务器的打印机列表
使用Get-Printer -ComputerName <ServerName>命令,需要确保执行脚本的用户有访问目标打印服务器的权限。 - 展示带序号的打印机列表
通过Select-Object添加自定义序号列,方便用户快速选择。 - 处理用户输入
验证输入的有效性,确保是合法的序号,避免无效输入导致脚本崩溃。 - 安装网络打印机
构建完整的打印机共享路径(\\服务器名\打印机名),使用Add-Printer -ConnectionName <路径>命令完成安装。
通用脚本扩展建议
- 支持多服务器选择:可以先列出常用的打印服务器,让用户选择目标服务器,再展示对应打印机列表。
- 批量安装:允许用户输入多个序号(如
1,3,5),批量安装选中的打印机。 - 状态检查:安装前先检查打印机是否已存在,避免重复安装报错。
- 保存常用配置:将常用打印服务器名称保存到配置文件,下次运行时直接选择,无需重复输入。
内容的提问来源于stack exchange,提问作者Linder Leiva
相关产品推荐
相关产品推荐

