Powershell 打印机安装脚本
Powershell printer installation script
我正在尝试创建一个执行一些操作的登录脚本。我需要它来完成以下内容。
- 查看并记录当前默认打印机
- 删除所有打印机。
- 安装特定的打印机列表。
- 将默认打印机设置回以前的默认打印机。
我需要这样做,因为我们已经在网络上更改了一些打印机名称,我们想用新名称重新映射所有打印机并安装一些额外的打印机。我目前有一个批处理文件调用 .ps1 文件。这是两个文件中的代码。
Login.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
如有任何帮助,我们将不胜感激!
您拼写了 PortName 错误,因此没有返回任何内容,并且您在 ($null)
上调用方法
(Get-WmiObject -Class Win32_Printer -Filter "portname='$CurDefPrinter'").SetDefaultPrinter()
如果您不需要使用“查询和筛选”选项,您可以这样做:
#to get the current default printer
$default = Get-WmiObject -Class Win32_Printer | Where-Object {$_.Default -eq "true"}
#to reset the default printer
$default.SetDefaultPrinter()
至少它在我的环境中有效。
我正在尝试创建一个执行一些操作的登录脚本。我需要它来完成以下内容。
- 查看并记录当前默认打印机
- 删除所有打印机。
- 安装特定的打印机列表。
- 将默认打印机设置回以前的默认打印机。
我需要这样做,因为我们已经在网络上更改了一些打印机名称,我们想用新名称重新映射所有打印机并安装一些额外的打印机。我目前有一个批处理文件调用 .ps1 文件。这是两个文件中的代码。
Login.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
如有任何帮助,我们将不胜感激!
您拼写了 PortName 错误,因此没有返回任何内容,并且您在 ($null)
(Get-WmiObject -Class Win32_Printer -Filter "portname='$CurDefPrinter'").SetDefaultPrinter()
如果您不需要使用“查询和筛选”选项,您可以这样做:
#to get the current default printer
$default = Get-WmiObject -Class Win32_Printer | Where-Object {$_.Default -eq "true"}
#to reset the default printer
$default.SetDefaultPrinter()
至少它在我的环境中有效。