4

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

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

$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. 它正在向双方添加引号。我需要去掉引号才能使快捷方式正常工作。

我认为这是因为 Powershell 认为我正在尝试创建标准快捷方式,并且认为我在输入路径时犯了错误。

我曾尝试在每个正斜杠前放置一个 `,希望转义字符能阻止它反转它,但没有运气。我也尝试为每个参数使用连字符,但这也不起作用。

有没有办法阻止这种情况发生?还是有更好的方法来尝试完成我想做的事情?

4

2 回答 2

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

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

于 2012-11-06T14:27:20.733 回答
1

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

所以一封简单列出的电子邮件:

\\PrintServer\Printer01
\\PrintServer\Printer02
\\PrintServer\Printer03

可能也会做同样的工作。

于 2012-11-06T15:15:09.547 回答