概述
我正在尝试使用PowerShell在Windows 2012 R2中设置默认打印机。每当我在本地这样做时,这都可以正常工作,但是无论我如何尝试远程运行它,我需要做的,它总是会在以下错误时失败。我已经使用域管理员帐户以及用户的凭据尝试了此操作,我需要更改默认打印机,但仍然失败。
错误
异常调用" setDefaultPrinter":"不支持" 在线:1 char:1 (get -wmiObject -class win32_printer -filter"(name ='Microsoft XPS文档写... ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ categoryInfo:未指定:(:) [],methodInvocation exception 完全QualifiedErrid:wmimethodexception
代码示例
在本地运行时工作
$Printer = Get-WmiObject -Class Win32_Printer -Filter "(Name='Microsoft XPS Document Writer')"
$Printer.SetDefaultPrinter()
远程运行时失败
$Printer = Get-WmiObject -ComputerName "MyRemoteComputer" -Class Win32_Printer -Filter "(Name='Microsoft XPS Document Writer')"
$Printer.SetDefaultPrinter()
当运行远程运行时也会失败
Invoke-Command -ComputerName "MyRemoteComputer" -ScriptBlock {(Get-WmiObject -Class Win32_Printer -Filter "(Name='Microsoft XPS Document Writer')").SetDefaultPrinter()}
第三次故障尝试
Get-WmiObject -ComputerName "MyRemoteComputer" -Class Win32_Printer -Filter "(Name='Microsoft XPS Document Writer')" | Invoke-WmiMethod -Name 'SetDefaultPrinter'
任何帮助和指导都非常感谢。
继续搜索后,我终于找到了一个有效的版本。我不完全理解原因,但是它有效,这对我来说已经足够了。幸运的是,我已经可以在代码中访问用户名和密码,否则它仍然可以使用Get-Credential
:
$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "DOMAINUsername", (ConvertTo-SecureString -String "ClearTextPassword" -AsPlainText -Force)
Invoke-Command -ComputerName "MyRemoteComputer" -Credential $Credential -ScriptBlock {
$net = new-Object -com WScript.Network
$net.SetDefaultPrinter("Microsoft XPS Document Writer")
}