Powershell 打印机安装脚本
Posted
技术标签:
【中文标题】Powershell 打印机安装脚本【英文标题】:Powershell printer installation script 【发布时间】:2017-12-15 19:23:27 【问题描述】:我正在尝试创建一个执行一些操作的登录脚本。我需要它来完成以下任务。
-
检查并记录当前的默认打印机。
删除所有打印机。
安装特定的打印机列表。
将默认打印机设置回原来的默认打印机。
我需要这样做,因为我们在网络上进行了一些打印机名称更改,并且我们想用新名称重新映射所有打印机,并安装一些额外的打印机。我目前有一个调用 .ps1 文件的批处理文件。这是两个文件中的代码。
登录.bat
@echo off
powershell -command Set-ExecutionPolicy Unrestricted -force
Powershell -command " & '\\server\share\MyPSScript.ps1'"
登录.ps1
# Save current default printer.
Get-WmiObject -Query " SELECT * FROM Win32_Printer WHERE Default=$true" | foreach $_.portname -OutVariable CurDefPrinter
# Deletes all network printers.
Get-WmiObject Win32_Printer | where$_.Network -eq ‘true‘ | foreach$_.delete()
# Maps all network printers.
add-printer -connectionname "\\server\ricoh"
add-printer -connectionname "\\server\hp"
# Set default printer
(Get-WmiObject -Class Win32_Printer -Filter "portame='$CurDefPrinter'").SetDefaultPrinter()
当我运行它时,我得到了这个错误。
C:\Temp\Scripts>Login.bat
C:\Temp\Scripts>REM @echo off
10.0.0.155
Get-WmiObject : Invalid query "select * from Win32_Printer where portame='10.0.0.155'"
At \\server\share\login.ps1:12 char:2
+ (Get-WmiObject -Class Win32_Printer -Filter "portame='$CurDefPrinter' ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Get-WmiObject], ManagementException
+ FullyQualifiedErrorId : GetWMIManagementException,Microsoft.PowerShell.Commands.GetWmiObjectCommand
You cannot call a method on a null-valued expression.
At \\server\share\Login.ps1:12 char:1
+ (Get-WmiObject -Class Win32_Printer -Filter "portame='$CurDefPrinter' ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
任何帮助将不胜感激!
【问题讨论】:
【参考方案1】:您的 PortName 拼写错误,因此没有返回任何内容,并且您在 ($null)
上调用了一个方法
(Get-WmiObject -Class Win32_Printer -Filter "portname='$CurDefPrinter'").SetDefaultPrinter()
【讨论】:
【参考方案2】:如果您不需要使用查询和过滤选项,您可以这样做:
#to get the current default printer
$default = Get-WmiObject -Class Win32_Printer | Where-Object $_.Default -eq "true"
#to reset the default printer
$default.SetDefaultPrinter()
至少它适用于我的环境。
【讨论】:
谢谢你的回答,它也适用于我,我可以用这个方法。以上是关于Powershell 打印机安装脚本的主要内容,如果未能解决你的问题,请参考以下文章
powershell DogeCoin挖掘安装脚本#Bitcoin#PowerShell