我无法运行调用命令脚本来在远程计算机上安装打印机。我的代码在本地工作,但是一旦将其通过Invoke-command输入,我就会收到错误消息。

本地:

$Printer = "\\server1\printer1"
(New-Object -Com Wscript.Network).AddWindowsPrinterConnection($Printer)

这样就可以添加打印机了。我可以在远程计算机上执行相同的命令,而不会出现任何问题。但是,当我尝试远程执行命令时,出现了问题。

远程:
$compname = "computer"
$Printer = "\\server1\printer1"
Invoke-Command -ComputerName $CompName -Scriptblock {(New-Object -Com Wscript.Network).AddWindowsPrinterConnection('$Printer')}

返回错误“打印机名称无效”

因此,我尝试使用以下代码查看shell发送到远程计算机的内容,并且写输出中的所有内容看起来都不错,但仍然出现错误:
Invoke-Command -ComputerName $CompName -Scriptblock {(New-Object -Com Wscript.Network).AddWindowsPrinterConnection('$Printer'); write-host "(New-Object -Com Wscript.Network).AddWindowsPrinterConnection('$Printer')"}

输出:
Exception calling "AddWindowsPrinterConnection" with "1" argument(s): "The printer name is invalid. (Exception from
HRESULT: 0x80070709)"
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ComMethodTargetInvocation
    + PSComputerName        : computer

(New-Object -Com Wscript.Network).AddWindowsPrinterConnection('\\server1\printer1')

编辑1/5/2015

因此,我尝试了Paul的代码,并在参数列表中添加了许多不同的条目。到目前为止,所有人都还没有工作。我认为前三个更接近答案。
-ArgumentList ""\\server1\printer1""
-ArgumentList ""'\\server1\printer1'""
-ArgumentList "\"\\server1\printer1""

结果是:
Invoke-Command : A positional parameter cannot be found that accepts argument '\\server1\printer1'.
At line:1 char:1
+ Invoke-Command -ComputerName $CompName -Scriptblock {(New-Object -Com Wscript.Ne ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Invoke-Command], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.InvokeCommandCommand



-ArgumentList "'\\server1\printer1'"
-ArgumentList \'"\\server1\printer1"'
-ArgumentList \""\\server1\printer1""
-ArgumentList \"\\server1\printer1"

造成:
Exception calling "AddWindowsPrinterConnection" with "1" argument(s): "The printer name is invalid. (Exception from
HRESULT: 0x80070709)"
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ComMethodTargetInvocation
    + PSComputerName        : sso-mxl327082y

最佳答案

试试这个:

Invoke-Command -ComputerName $CompName -Scriptblock {(New-Object -Com Wscript.Network).AddWindowsPrinterConnection($args[0]); write-host "(New-Object -Com Wscript.Network).AddWindowsPrinterConnection($($args[0]))"} -ArgumentList "\\server1\printer1"

我认为这是因为$printer变量位于单引号之间,而单引号之间的变量不是由powershell解释的。因此,您的函数可能获得的打印机名称是“$ printer”。

如果您想知道它是否已正确打印在write-host语句中,因为这里单引号位于字符串中。

关于powershell - 通过Powershell将共享打印机添加到远程计算机,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27746731/

10-15 22:40