Articolo “appunti“, come sporadicamente capita qui sopra. Ho avuto la necessità di rimuovere delle mappature verso stampanti di rete non più raggiungibili (cambio server remoto di stampa, nda), tutte queste non controllate da GPO (erano state aggiunte manualmente dagli utenti). Ho aggirato l’ostacolo con alcune righe di VBScript. Le ritrovi qui di seguito nel caso in cui dovessero servirti.
Pulizia completa (da server)
Ti ricordo che il VBScript può essere eseguito manualmente, o inserito in un più complesso (e completo) script di Logon, o magari puoi pensare di lanciarlo su altre macchine passando per PSExec o qualsiasi altro strumento di gestione postazioni come Kace (o equivalenti).
Dim objWMIService, objNetwork, colInstalledPrinters, objPrinter strComputer = "." i = 0 PrintServer = "NOME-VECCHIO-SERVER" Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colInstalledPrinters = objWMIService.ExecQuery _ ("Select * from Win32_Printer") For Each objPrinter in colInstalledPrinters ReDim Preserve arrPrinterName(i) arrPrinterName(i) = objPrinter.Name If InStr(arrPrinterName(i), PrintServer) Then Set objNetwork = WScript.CreateObject("WScript.Network") objNetwork.RemovePrinterConnection arrPrinterName(i) i=i+1 Else End If Next
Il nome del server viene dichiarato come variabile PrintServer
(facile intuirlo, eh?), devi praticamente sostituire quell’unica cosa lasciando invariato il resto.
e qualcosina da locale
Sì, perché potrebbe anche capitare che –contestualmente– ci sia qualcosa installato in locale sulla macchina (e non solo figlio del tasto destro → connetti), anch’esso non più utile alla quotidianità dell’utente. A questo punto però, contrariamente alla porzione di script di prima, ricorda che per quella di seguito servirà essere amministratori del PC (quindi bisognerà lanciare lo script come tali, o trovare un’alternativa):
arrDeletePrinters = Array("STAMPANTE1","STAMPANTE2","STAMPANTE3") For Each objPrinter in colInstalledPrinters For Each strPrinter in arrDeletePrinters If Not InStr(1, objPrinter.DeviceID, strPrinter, 1) = 0 Then objPrinter.Delete_ End If Next Next
dove al posto di STAMPANTE1
, STAMPANTE2
, STAMPANTE3
(volendo puoi dichiararne ancora, o toglierne, se necessario), dovrai inserire quelle che realmente vuoi eliminare, basta il nome con il quale è stata dichiarata (ogni singola stampante) sul sistema, ammesso che qualcuno non abbia avuto la malsana idea di nominarle in maniera differente ogni volta.
Ovviamente non è detto che tu abbia necessità di entrambe le soluzioni, puoi quindi limitarti a riportare la prima parte dello script in un tuo file (.vbs
) da salvare dove più ritieni opportuno (in modo tale che sia raggiungibile dalle tue postazioni, chiaramente), o magari solo la seconda, stando però attento a includergli in testa il blocco relativo alla preparazione variabili e funzioni da richiamare (Dim objWMIService, objNetwork, colInstalledPrinters, objPrinter, la parte relativa a strComputer e il Set objWMIService = GetObject(“winmgmts:” _& “{impersonationLevel=impersonate}!\\” & strComputer & “\root\cimv2”)).
Un grande grazie alle fonti che hanno permesso di “pacchettizzare” una soluzione rapida per aggirare un banale ostacolo:
- community.spiceworks.com/scripts/show/632-remove-all-network-printers-by-print-server-name
- community.spiceworks.com/scripts/show/2725-delete-local-printer-s-log-results
Buon lavoro!
L'articolo potrebbe non essere aggiornato
Questo post è stato scritto più di 5 mesi fa, potrebbe non essere aggiornato. Per qualsiasi dubbio ti invito a lasciare un commento per chiedere ulteriori informazioni! :-)