Jak usunąć wszystkie drukarki lokalne zainstalowane na komputerze?
Skrypciarze odpowiadają na Wasze pytania
Witamy w rubryce TechNet, w której Skrypciarze z firmy Microsoft odpowiadają na częste pytania dotyczące używania skryptów w administracji systemu. Jeśli macie jakieś pytania z tej dziedziny, zachęcamy do wysłania e-maila na adres: scripter@microsoft.com. Nie możemy zagwarantować odpowiedzi na każde otrzymane pytanie, ale staramy się jak możemy. |
Jak usunąć wszystkie drukarki lokalne zainstalowane na komputerze?
Cześć, Skrypciarze! Jak usunąć wszystkie lokalne drukarki zainstalowane na komputerze?
-- JW
Cześć, JW. Mówisz, że chodzi o komputery z systemem Windows XP lub Windows Server 2003, prawda? Jak to, nie tylko? No cóż, będziemy jednak udawać, że jednak tak, ponieważ w Windows XP i Windows Server 2003 jest to o wiele łatwiejsze za sprawą klasy WMI Win32_Printer, która w tych systemach może nie tylko bez trudu rozróżnić drukarki lokalne i sieciowe, ale i obsługuje metodę Delete_. Jak się można domyślić, ta metoda umożliwia usunięcie połączeń z drukarkami. Innymi słowy, WMI umożliwia precyzyjne usunięcie wyłącznie drukarek lokalnych. A o to Ci przecież chodziło.
Jak to jednak zwykle bywa, mamy też złe wieści. Otóż we wcześniejszych wersjach systemu Windows wybranie wyłącznie drukarek lokalnych jest trudniejsze. Co gorsza, klasa Win32_Printer nie obsługuje metody Delete_. To oznacza, że całe zadanie jest o wiele trudniejsze. Tak więc obecnie skoncentrujemy się na nowszych systemach, a usuwanie drukarek Windows 2000 zostawimy sobie na kiedy indziej.
W systemach Windows XP i Windows Server 2003 do usunięcia drukarek lokalnych wystarcza taki skrypt:
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer Where Network = FALSE")
For Each objPrinter in colInstalledPrinters
objPrinter.Delete_
Next
Zaczyna się on od połączenia z usługą WMI komputera lokalnego (ale można go bez trudu zmodyfikować tak, aby łączył się z komputerem zdalnym). Następnie za pomocą poniższego wiersza kodu zwracamy kolekcję wszystkich drukarek lokalnych; WMI rozpoznaje drukarkę jako lokalną, jeśli właściwość Network ma wartość False:
Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer Where Network = FALSE")
Po uzyskaniu kolekcji drukarek lokalnych możemy po prostu uruchomić pętlę For Each, która przez nią przejdzie, wywołując metodę Delete_ (zwróćcie uwagę na podkreślnik na końcu) dla każdej drukarki:
For Each objPrinter in colInstalledPrinters
objPrinter.Delete_
Next
I to już wszystko – w ten sposób usuwamy drukarki lokalne, zostawiając drukarki sieciowe w spokoju. Przynajmniej w Windows XP i Windows Server 2003.
Do początku strony |