我正在尝试为打印服务器上的每台打印机生成一个快捷方式。这个想法是能够通过电子邮件将这些快捷方式发送给人们,当他们点击它们时,它会自动为他们安装该打印机。
我从打印服务器导出的打印机名称列表中填充了一个数组:
$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 认为我正在尝试创建标准快捷方式,并且认为我在输入路径时犯了错误。
我曾尝试在每个正斜杠前放置一个 `,希望转义字符能阻止它反转它,但没有运气。我也尝试为每个参数使用连字符,但这也不起作用。
有没有办法阻止这种情况发生?还是有更好的方法来尝试完成我想做的事情?