从列表生成打印机快捷方式

时间:2012-11-06 14:15:05

标签: powershell printers

我正在尝试为打印服务器上的每台打印机生成一个快捷方式。我们的想法是能够将这些快捷方式通过电子邮件发送给用户,当他们点击它们时,它会自动为他们安装该打印机。

我从打印服务器导出的打印机名称列表中填充了一个数组:

$list = @((get-contnet $home\dekstop\plist.txt))

然后我创建了一个创建快捷方式的方法:

function Make-Shortcut
{
param ([string]$dest, [string]$source)
$WshShell = New-Object -comObject Wscript.Shell
$Shortcut = $WshShell.CreateShortcut($dest)
$Shortcut.TargetPath = $Source
$Shortcut.Save()
}

该功能正常。我能够毫无问题地创建标准快捷方式。

下一部分是我陷入困境的地方:

foreach ($i in $list)
{
Make-Shortcut "C:\pshort\$i.lnk" "C:\Windows\System32\rundll32.exe 
printui.dll,PrintUIEntry /in /q /n\\printserver\$i"
}

运行时,它会为列表中的每台打印机生成一个与打印机同名的快捷方式。但是,问题出现在目标路径上。而不是

C:\Windows\System32\rundll32.exe printui.dll,PrintUIEntry /in /q /n\\printserver\printername

将其更改为:

C:\Windows\System32\rundll32.exe printui.dll,PrintUIEntry \in \q \n\printserver\printername

这有三个问题:

  1. 正在反转参数的正斜杠
  2. 正在删除服务器名称前面的一个反斜杠
  3. 正在向双方添加引用。我需要引号才能使快捷方式正常工作。
  4. 我认为这种情况正在发生,因为Powershell认为我正在尝试制作标准的快捷方式并认为我在输入路径时犯了错误。

    我试过在每个前锋斜线前放一个`,希望逃脱角色可以阻止它反转它,但没有运气。我也尝试过为每个参数使用连字符,但这也不起作用。

    反正有没有阻止这种情况发生?或者是否有更好的方法来尝试完成我想要做的事情?

2 个答案:

答案 0 :(得分:2)

您需要向com object

添加参数

尝试向您的$arguments功能添加新的参数Make-Shortcut并执行:

Make-Shortcut "C:\pshort\$i.lnk" "C:\Windows\System32\rundll32.exe" 
"printui.dll,PrintUIEntry /in /q /n\\printserver\$i"

在你的函数中添加:

$Shortcut.Arguments = $arguments

因此链接创建成功...但我不知道它是否有效:)

答案 1 :(得分:1)

完全不同的答案,但在标准的Windows环境中,只需点击指向\ printserver \ printer的超链接即可将共享打印机添加到某人的系统中?

这是一封简单列出的电子邮件:

\\打印服务器\ Printer01
\\打印服务器\ Printer02
\\ PrintServer \ Printer03

也许可以完成这项工作。