Centrum Skrypciarzy - Systemy Operacyjne

Jak usunąć wszystkie drukarki lokalne zainstalowane na komputerze?

Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

Cześć Skrypciarze!

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! Pytanie

Cześć, Skrypciarze! Jak usunąć wszystkie lokalne drukarki zainstalowane na komputerze?

-- JW

Cześć Skrypciarze! Odpowiedź

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 Do początku strony

Centrum Skrypciarzy - Systemy Operacyjne