VBScript: rimuovere mappature verso le stampanti di rete

Gioxx  —  14/07/2017 — Leave a comment

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.

VBScript: rimuovere mappature stampanti (Coding)

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:

Buon lavoro!

Condividi l'articolo con i tuoi contatti: