ischias1997
Goto Top

PowerShell Installierten Drucker als Standarddrucker setzen

Hallo zusammen,

folgende Aufgabe versuche ich (leider vergebens... ) zu lösen.

Ich lese alle vorhandenen Drucker mittels
get-wmiobject win32_printer | Select Name
aus.
Anschließend möchte ich den ersten Wert dieser Liste als Standarddrucker setzten...
SetDefaultPrinter()

Ich muss dazu sagen, dass das meine ersten Berührungen mit der PowerShell sind.

Mir scheint, als hätte ich hier ein absolutes Brett vorm Kopf.

Schon mal danke für eure Antworten!
LG

Content-Key: 600883

Url: https://administrator.de/contentid/600883

Printed on: April 16, 2024 at 20:04 o'clock

Mitglied: 145033
Solution 145033 Sep 01, 2020 updated at 10:42:21 (UTC)
Goto Top
Anschließend möchte ich den ersten Wert dieser Liste als Standarddrucker setzten...
Wirklich sicher anhand der Position?? Nicht anhand des Namens?
(gwmi win32_Printer | select -First 1).SetDefaultPrinter()
Wenn doch anhand des Namens
gwmi win32_Printer -Filter "Name like '%Laserjet%'" | select -First 1 | %{$_.SetDefaultPrinter()}  
Member: chkdsk
chkdsk Sep 01, 2020 updated at 10:57:59 (UTC)
Goto Top
Vielleicht etwas zu viel für deine Anforderung aber probier mal folgendes. Skript kann man dann natürlich noch erweitern um bspw. ganze Druckerinstallationen etc.

$window = Add-Type -memberDefinition @"  
[DllImport("user32.dll")]  
public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
"@ -name "Win32ShowWindowAsync" -namespace Win32Functions -passThru  
$window::ShowWindow((Get-Process –id $pid).MainWindowHandle, 0) 
	
	
	$Printers = Get-WmiObject -Class Win32_Printer | Select-Object -ExpandProperty name
	
	
	function Refresh-Printers {
    $Printers = Get-WmiObject -Class Win32_Printer | Select-Object -ExpandProperty name
    $lstBX_printers.Items.Clear()
	$lstBX_printers.Items.AddRange(@($Printers))
	}
	
    $currentPrinter = Get-WmiObject -Query " SELECT * FROM Win32_Printer WHERE Default=$true" | Select-Object -ExpandProperty name  
	
    	
    Add-Type -AssemblyName System.Windows.Forms	
    $Form = New-Object system.Windows.Forms.Form		
    $Form.Text = "Standard Drucker Einstellung"  
    $Form.BackColor = "#7fb5b5"  
    $Form.TopMost = $true
    $Form.Width = 1020
    $Form.Height = 500
    $Form.StartPosition = "CenterScreen"  
    $Icon = [system.drawing.icon]::ExtractAssociatedIcon($PSHOME + "\powershell.exe")  
    $Form.Icon = $Icon
		
		
	
    $lb_availablePrinters = New-Object system.windows.Forms.Label
    $lb_availablePrinters.Text = "aktuell installierte Drucker"  
    $lb_availablePrinters.AutoSize = $true
    $lb_availablePrinters.Width = 25
    $lb_availablePrinters.Height = 10
    $lb_availablePrinters.location = new-object system.drawing.point(20,30)
    $lb_availablePrinters.Font = "Verdana,15,style=Bold"  
    $Form.controls.Add($lb_availablePrinters)

	
    $lb_defaultPrinter = New-Object system.windows.Forms.Label
    $lb_defaultPrinter.Text = "↓ aktueller Standarddrucker ↓"  
    $lb_defaultPrinter.AutoSize = $true
    $lb_defaultPrinter.Width = 25
    $lb_defaultPrinter.Height = 10
    $lb_defaultPrinter.location = new-object system.drawing.point(450,30)
    $lb_defaultPrinter.Font = "Verdana,18,style=Bold"  
    $Form.controls.Add($lb_defaultPrinter)

    
    $lb_printer = New-Object system.windows.Forms.Label
    $lb_printer.Text = "$currentPrinter"  
    $lb_printer.AutoSize = $true
    $lb_printer.Width = 350
    $lb_printer.Height = 50
    $lb_printer.location = new-object system.drawing.point(450,100)
    $lb_printer.Font = "Verdana,15"  
    $Form.controls.Add($lb_printer)	
	
	
    $CHANGEButton = new-object System.Windows.Forms.Button
    $CHANGEButton.Location = new-object System.Drawing.Size(20,330)
    $CHANGEButton.Size = new-object System.Drawing.Size(150,20)
    $CHANGEButton.Text = "Aktualisieren"  
    $CHANGEButton.ForeColor = "Black"  
    $CHANGEButton.backColor = "White"  
    $CHANGEButton.Add_Click({Refresh-Printers})
    $Form.Controls.Add($CHANGEButton)

   
    $bt_close = New-Object system.windows.Forms.Button
    $bt_close.Text = "Schließen"  
    $bt_close.ForeColor = "White"  
    $bt_close.BackColor = "Red"  
    $bt_close.Cursor = [System.Windows.Forms.Cursors]::Hand
    $bt_close.Width = 145
    $bt_close.Height = 33
    $bt_close.Add_Click({
    $Form.Close()
    })
    $bt_close.location = new-object system.drawing.point(820,400)
    $bt_close.Font = "Verdana,15,style=Bold"  
    $Form.controls.Add($bt_close)		
	
    
    $lstBX_printers = New-Object system.windows.Forms.ListBox
    $lstBX_printers.Width = 300
    $lstBX_printers.Height = 200
    $lstBX_printers.location = new-object system.drawing.point(20,100)
    foreach ($Printer in $Printers)
    {
        $lstBX_printers.Items.Add($Printer)
    }
    $lstBX_printers.Add_Click({
        $Global:currentPrinter = $lstBX_printers.SelectedItem
    })
	
    $Form.controls.Add($lstBX_printers)
    $bt_setDefault = New-Object system.windows.Forms.Button
    $bt_setDefault.Text = "als Standard einrichten"  
    $bt_setDefault.ForeColor = "White"  
    $bt_setDefault.BackColor = "Green"  
    $bt_setDefault.Cursor = [System.Windows.Forms.Cursors]::Hand
    $bt_setDefault.Width = 300
    $bt_setDefault.Height = 33
    $bt_setDefault.Add_Click({
        (New-Object -ComObject WScript.Network).SetDefaultPrinter($Global:currentPrinter)
        $lb_printer.Text = "$Global:currentPrinter"  
        $lb_printer.Refresh()
    })
    $bt_setDefault.location = new-object system.drawing.point(20,400)
    $bt_setDefault.Font = "Verdana,12,style=Bold"  
    $Form.controls.Add($bt_setDefault)	
	
	
    $Form.controls.Add($lstBX_printers)
    $bt_setDefault = New-Object system.windows.Forms.Button
    $bt_setDefault.Text = "Drucker Entfernen"  
    $bt_setDefault.ForeColor = "White"  
    $bt_setDefault.BackColor = "Orange"  
    $bt_setDefault.Cursor = [System.Windows.Forms.Cursors]::Hand
    $bt_setDefault.Width = 300
    $bt_setDefault.Height = 33
    $bt_setDefault.Add_Click({
	    Remove-Printer -name($Global:currentPrinter)   
		
		Refresh-Printers
        $lb_printer.Refresh()
    })
    $bt_setDefault.location = new-object system.drawing.point(400,400)
    $bt_setDefault.Font = "Verdana,12,style=Bold"  
    $Form.controls.Add($bt_setDefault)	
	
	[void]$Form.ShowDialog()
    $Form.Dispose()
	
Member: Ischias1997
Ischias1997 Sep 01, 2020 at 11:12:15 (UTC)
Goto Top
Perfekt, dass war genau das, was ich gesucht habe! Danke!
Member: Ischias1997
Ischias1997 Sep 01, 2020 at 11:13:09 (UTC)
Goto Top
Danke dafür, leider ist das Script zu umfangreich für mich, als dass ich die Reichweite dessen verstehe *newby incomming..."
Member: chkdsk
chkdsk Sep 01, 2020 at 11:15:46 (UTC)
Goto Top
Keine Ursache. Nur so nebenbei...einfach copy&paste von meinem Skript in eine Textdatei und die Endung ins .ps1 ändern. Das wars