从列表中生成打印机快捷方式
Posted
技术标签:
【中文标题】从列表中生成打印机快捷方式【英文标题】:Generating printer shortcuts from list 【发布时间】:2012-11-06 14:15:04 【问题描述】:我正在尝试为打印服务器上的每台打印机生成一个快捷方式。这个想法是能够通过电子邮件将这些快捷方式发送给人们,当他们点击它们时,它会自动为他们安装该打印机。
我从打印服务器导出的打印机名称列表中填充了一个数组:
$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
这样做的三个问题是:
-
它正在反转参数的正斜杠
它正在删除服务器名称前面的反斜杠之一
它正在向两边添加引号。我需要去掉引号才能使快捷方式正常工作。
我认为这是因为 Powershell 认为我正在尝试创建标准快捷方式,并认为我在输入路径时犯了错误。
我尝试在每个正斜杠前放置一个 `,希望转义字符能阻止它反转它,但没有运气。我也尝试为每个参数使用连字符,但这也不起作用。
有没有办法阻止这种情况发生?或者有没有更好的方法来尝试完成我想做的事情?
【问题讨论】:
【参考方案1】:你需要给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 次小调整来实现这一点。在调用 Make-Shortcut 时,我必须在第二个参数中添加一个 + " " 以获取要附加的参数。否则,快捷方式在 rundll32.exe 处停止。非常感谢您的帮助! @JohnLarlen Gald 来帮忙!很高兴知道空格字符!【参考方案2】:完全不同的答案,但在标准 Windows 环境中,只需单击指向 \printserver\printer 的超链接即可将共享打印机添加到某人的系统中?
所以一封简单列出的电子邮件:
\\PrintServer\Printer01 \\PrintServer\Printer02 \\PrintServer\Printer03
可能也能胜任这项工作。
【讨论】:
很遗憾,我们使用的电子邮件客户端不允许这样做。以上是关于从列表中生成打印机快捷方式的主要内容,如果未能解决你的问题,请参考以下文章