当我在本地PowerShell环境中使用Add-Printer -ConnectionName '\\server\Printer'
时,它会成功。
当我使用相同的命令时,却包含在Invoke-Command中,如下所示:
Invoke-Command -ComputerName 'someServer' -Credential $creds -Authentication CredSSP -ScriptBlock { Add-Printer -ConnectionName '\\server\Printer' }
说不清楚
'\' is an invalid character.
我猜测它已连接到本地和远程可用的不同级别的用户个人资料,但我不确定如何解决它。
修改:为了更新这一点,我不得不放弃这种方法,因为我无法让它发挥作用。我的解决方法是使用
RUNDLL32 PRINTUI.DLL,PrintUIEntry /ga /c\\computerName /n\\someServer\Printer /q
哪个有效,但它与Add-Printer cmdlet略有不同。
答案 0 :(得分:1)
我不是百分百肯定你为什么会看到这个错误。我确信这与处理字符串的方式有关。
但是,您不应该真正需要通过Invoke-Command
运行它,因为Add-Printer
本身有两个选项可以将打印机添加到远程计算机。
您可以使用-CompuerName
参数指定单个计算机:
Add-Printer -ComputerName 'someServer' -ConnectionName '\\server\Printer'
您还可以使用-CimSession
参数指定一个(或多个)CimSession,允许您同时点击一堆机器。
使用此命令需要注意的一点是,它仅适用于Server 2012 / Windows 8及更高版本(包括远程目标)。
答案 1 :(得分:1)
我遇到了类似的问题,但我试图从打印服务器遍历共享打印机列表,然后将所有打印机添加到本地计算机。如果你想看到我的解决方案,请跳到底部。
以下命令将所有共享打印机作为对象返回:
$printerList = Get-Printer -ComputerName PrintServer | where Shared -eq $true
以下内容应该遍历我的所有打印机并添加每个打印机:
foreach ($printer in $printerList) {
Add-Printer -ConnectionName "\\PrintServer\$printer.SharedName"
}
相反,我应该遇到与OP相同的错误:
添加打印机:指定的服务器不存在,或者服务器或打印机名称无效。名称可能不包含','或者' \'字符。 在线:1字符:38 + ... nterList){Add-Printer -ConnectionName" \ PrintServer \ $ printer.SharedNam ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~ + CategoryInfo:未指定:(MSFT_Printer:ROOT / StandardCimv2 / MSFT_Printer)[Add-Printer],CimException + FullyQualifiedErrorId:HRESULT 0x80070709,Add-Printer
毋庸置疑,我对这些结果感到非常困惑,因为当我测试发生的事情时,我会看到以下内容:
Write-Host $printer.ShareName
printerName
大!为什么它不能用双引号工作?我故意使用双引号来返回$ printer变量的内容:
Write-Host "$printer.ShareName"
MSFT_Printer(名称=" printerName",ComputerName =" PrintServer",DeviceType = 0,Type = 0).ShareName
可能由于类型转换或谁知道什么(并且是的,ShareName属性已经是一个简单的字符串,它不是哈希表或嵌套的时髦数据类型),而不是弄乱CimException,我做了一个简单的ToString()
作为解决方法:
$printerList = Get-Printer -ComputerName PrintServer | where Shared -eq $true
foreach ($printer in $printerList) {
$printerStr = $printer.ShareName.ToString()
Add-Printer -ConnectionName "\\PrintServer\$printerStr"
}
答案 2 :(得分:0)
我也遇到了这个问题,ToString()
并没有为我解决。这是“不需要”参数-ComputerName
。我正在运行remove-PrinterPort -Name $port
,导致出现以下错误:
The specified server does not exist, or the server or printer name is invalid. Names may not contain ',' or '\' characters.
敲打头和Googlin'之后,我终于将计算机名称添加为$env:computername
这样的测试,我尝试使用“”。以前,因为我认为这意味着要使用本地计算机,但是它无法正常工作,只是停滞了。
添加计算机名称后,端口和驱动程序被删除,没有错误。
get-help Remove-PrinterPort
显示-Computer
名称不是必需的,但似乎确实是必需的:
-ComputerName [<String>]
Specifies the name of the computer from which to remove the printer port.
Required? false
Position? named
Default value none
Accept pipeline input? false
Accept wildcard characters? false