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

これには次の 3 つの問題があります。

  1. パラメータのスラッシュを逆にしています
  2. サーバー名の前のバックスラッシュの1つを削除しています
  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 に答える