プリント サーバーにあるすべてのプリンタのショートカットを生成しようとしています。アイデアは、これらのショートカットを人々に電子メールで送信できるようにすることです。人々がそれらをクリックすると、そのプリンタが自動的にインストールされます。
プリント サーバーからエクスポートされたプリンター名のリストから配列を作成しました。
$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
これには次の 3 つの問題があります。
- パラメータのスラッシュを逆にしています
- サーバー名の前のバックスラッシュの1つを削除しています
- 両側に引用符を追加しています。ショートカットが正しく機能するためには、引用符を外す必要があります。
これは、Powershell が標準のショートカットを作成しようとしていると判断し、パスの入力中に間違いを犯したと判断したためだと思います。
エスケープ文字がスラッシュを元に戻すのを防ぐことを期待して、各スラッシュの前に ` を入れてみましたが、うまくいきませんでした。また、各パラメーターにハイフンを使用しようとしましたが、それも機能しませんでした。
これが起こらないようにする方法はありますか?それとも、私がやろうとしていることを達成しようとするより良い方法はありますか?