Programmatically set default printer

Dziś zaprezentuję jak programowo zmienić domyślną drukarkę. Wiem, iż może się okazać po co, skoro wystarczy kilka kliknięć i gotowe. A no np. dlatego, iż czasem nie mamy dostępu do GUI, np. w systemach w wersji Core, lub po prostu mamy taki kaprys. Jak więc tego dokonać ? Najprościej przy pomocy PowerShella.

Do tego celu posłużymy się klasą WMI Win32_Printer. Najpierw musimy pobrać listę dostępnych drukarek:

$printers = Get-WmiObject -Class Win32_Printer

Następnie zainicjalizujmy sobie listę, która posłuży do stworzenia listy wyboru.

$printersList = @() 

Gdy już mamy zainicjalizowaną listę przejdźmy przez każdą z dostępnych drukarek i stwórzmy dla każdej z nich opcję wyboru. Z racji iż nazwa drukarki mogą być dość podobne dlatego dla rozróżnienia najlepiej skorzystać z prostego wylistowania numeru pozycji na liście.

Foreach($printer in $printers)
{
  $printersList += New-Object System.Management.Automation.Host.ChoiceDescription "&$($printersList.count) $($_.Name)"
}

Następnie tworzymy obiekt opcji wyboru oraz wywołujemy zapytanie o wybór drukarki.

$Options = [System.Management.Automation.Host.ChoiceDescription[]]($printersList)
$choose = $host.ui.PromptForChoice("Printers List", "Choose a printer", $Options,0)  

Ostatecznie dzięki wykorzystaniu metody SetDefaultPrinter dla poszczególnych instancji naszych drukarek możemy zmienić aktualny status domyślnej drukarki. Wystarczy wskazać odpowiednią instancję drukarki i skorzystać z w/w metody.

$printers[$choose].SetDefaultPrinter() 

Dla sprawdzenia możemy ponownie wywołać klasę Win32_Printer z przedstawieniem takich parametrów jak Caption oraz Default.

Get-WmiObject -Class Win32_Printer |select Caption, Default 

Całość wygląda następująco:

$printers = Get-WmiObject -Class Win32_Printer

$printersList = @()
Foreach($printer in $printers)
{
$printersList += New-Object System.Management.Automation.Host.ChoiceDescription "&$($printersList.count) $($printer.Name)"
}

$Options = [System.Management.Automation.Host.ChoiceDescription[]]($printersList)
$choose = $host.ui.PromptForChoice("Printers List", "Choose a printer", $Options,0)

$printers[$choose].SetDefaultPrinter()
Reklamy

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Zdjęcie na Google+

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s