web-dev-qa-db-ja.com

ユーザーの介入なしにプリンター接続を削除するにはどうすればよいですか?

状況は次のとおりです。11台のプリンターを新しいモデルに交換し、それらをプリントサーバーにインストールして共有します。計画では、新しいプリンターを交換するプリンターとは異なる名前で共有し、古いプリンターの共有を解除します。

そのため、古いプリンタへのクライアント接続を自動的に削除する方法を考え出す必要があります。クライアントは主にWindows7で、XPがいくつかあります。

私の最初のアイデアは、ログインスクリプトからprnmngr.vbsを呼び出して、古いプリンタを名前で明示的に削除することでした。問題は、一部のユーザーが1日の作業を終えてもログアウトしないため、次に印刷する必要がある前にログインスクリプトが実行されていることを期待できないことです。 SCCMを使用してprnmngr.vbsをリモートで実行することはできますが、ユーザーになりすましていない場合は、プリンターが削除されるとは思いません。何か案は? c#コードを使用してWMIにアクセスする方法を検索し、「トロイの木馬」を記述して、ユーザーが何もしなくても特定のプリンターを削除できますか? (私は半分冗談です)。

私はどんな提案にもオープンです!ありがとう!

2
1.618

グループポリシーのプリンタ設定 「削除」オプションが含まれています。 GPP GPOを使用して新しいプリンターを展開する場合は、その末尾に[削除]アイテムを追加するか、まったく新しいDelete PrintersGPOを作成できます。

約75台のプリンターでこのような移行を行ったところ、非常にスムーズに進みました。 1つのDeploy Printers GPOがドメインレベルでリンクされ、すべてのプリンターが含まれています。マッピングは、アイテムレベルターゲティングを使用してグループメンバーシップを介して制御されます。また、Deleted Printers GPOドメインレベルで、古いプリントサーバー上のすべての古いプリンタがあります。本当に必要がないので、これをフィルタリングする必要はありませんでした。古いものでマップされている場合は、実行する必要があります。

GPPアイテムの良いところは、ポリシーの更新間隔で実行されることです。つまり、ログオン/ログオフ/再起動は必要ありません。ポリシーを構成し、リンクして、腰を下ろすだけです。スクリプトやWMI、またはそのいずれかをいじることはありません。

4
MDMarra

実際にプリンタを取り外すのは簡単な部分です

strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set colInstalledPrinters = objWMIService.ExecQuery _
    ("Select * From Win32_Printer Where Network = True")

For Each objPrinter in colInstalledPrinters
    objPrinter.Delete_
Next

難しい(または少なくともお尻の痛み)部分は、ユーザーが何か(再起動など)を行うことなく、すべてのユーザーにそれを押し出すことです。率直に言って、私の解決策は、新しいプリンターをマップするために再起動するようにユーザーに通知する電子メールを送信することです。このようにして、GPOを介してプリンター削除スクリプトをRun Onceレジストリ設定に配置し、後でGPPを介して新しいプリンターをマップできます。

小規模または適切に構成された環境の場合は、いつでもスクリプトを実行して、psexecを使用してすべてのユーザーワークステーションにプッシュできます(ワークステーションのリストを含む.csvまたはその他の区切りテキストファイルが必要です)。しかし、繰り返しになりますが、それは価値のある苦痛のように思えます。私の好みは、ユーザーに再起動するように指示することです。

3
HopelessN00b