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-ID: 600883

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

Ausgedruckt am: 23.11.2024 um 14:11 Uhr

145033
Lösung 145033 01.09.2020 aktualisiert um 12:42:21 Uhr
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()}  
chkdsk
chkdsk 01.09.2020 aktualisiert um 12:57:59 Uhr
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()
	
Ischias1997
Ischias1997 01.09.2020 um 13:12:15 Uhr
Goto Top
Perfekt, dass war genau das, was ich gesucht habe! Danke!
Ischias1997
Ischias1997 01.09.2020 um 13:13:09 Uhr
Goto Top
Danke dafür, leider ist das Script zu umfangreich für mich, als dass ich die Reichweite dessen verstehe *newby incomming..."
chkdsk
chkdsk 01.09.2020 um 13:15:46 Uhr
Goto Top
Keine Ursache. Nur so nebenbei...einfach copy&paste von meinem Skript in eine Textdatei und die Endung ins .ps1 ändern. Das wars