Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst PowerShell GUI "Start" Knopf, Befehl richtig zuweisen

Mitglied: 135531

135531 (Level 1)

13.03.2018 um 16:41 Uhr, 253 Aufrufe, 3 Kommentare

Hi @all,

ich bin momentan dabei eine PowerShell GUI zu bauen um den Standardrucker zu ändern (Die Idee ist aus langeweile entstanden ). Ich habe mich einfach mal dran gesetzt, ohne jegliche Grundkenntnisse übers "Skripten" mit der PowerShell. Das Skript läuft auch genau so wie es sollte. Mit Außnahme des Befehls den Drucker zu ändern....

Das Ziel ist den Drucker in der ComboBox auszuwählen und mit dem betätigen des "Start"-Knopfes den ausgewählten Drucker als Standarddrucker festzulegen.

Nachdem ich das Skript ausgeführt habe, gibt es Keine Fehlermeldung, allerdings ist der Standarddrucker immernoch derselbe.. Es hat sich also nichts getan..

Nach langem hin und her, und gefühlt 1000 versuchten Variationen gehen mir die Ideen aus. Worin liegt mein Fehler, bzw. was mache ich Falsch?

Der "Start"-Knopf :

01.
$StartButton = New-Object System.Windows.Forms.Button 
02.
$StartButton.Location = New-Object System.Drawing.Size(400,100) 
03.
$StartButton.Size = New-Object System.Drawing.Size (75,25) 
04.
$StartButton.Text = "Start" 
05.
$StartButton.Add_Click( 
06.
07.
    $printer = $objComboBoxD.SelectedItem 
08.
    $printers = Get-Printer | ?{$_.FriendlyName -eq $printer} 
09.
    If($printers) 
10.
11.
        (Get-WmiObject -Query "Select * from Win32_Printer Where Name = '$printers'").setDefaultPrinter() 
12.
 
13.
        Write-Host "Der Standarddrucker wurde erfolgreich geändert." 
14.
15.
    Else 
16.
17.
        Write-Warning "Der Drucker kann nicht gefunden werden" 
18.
19.
}) 
20.
 
21.
$objForm.Controls.Add($StartButton)
Der komplette Code sieht derzeit so aus :

01.
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 
02.
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 
03.
$objForm = New-Object System.Windows.Forms.Form 
04.
$objForm.BackColor = "White" 
05.
$objForm.BackgroundImageLayout = 1 
06.
$objForm.BackgroundImage = [System.Drawing.Image]::FromFile('C:\Users\jannikr\Pictures\Microsoft-Logo.jpg') 
07.
$objForm.StartPosition = "CenterScreen" 
08.
$objForm.Size = New-Object System.Drawing.Size(600,600) 
09.
$objForm.Text = "Standardrucker Festlegen" 
10.
 
11.
# Drucker Auswählen 
12.
 
13.
$objLabel = New-Object System.Windows.Forms.Label 
14.
$objLabel.Location = New-Object System.Drawing.Size(50,50) 
15.
$objLabel.Size = New-Object System.Drawing.Size(200,50) 
16.
$objLabel.Text = "Bitte wählen sie einen Drucker aus:" 
17.
$objForm.Controls.Add($objLabel) 
18.
 
19.
$objComboBoxD = New-Object System.Windows.Forms.ComboBox 
20.
$objComboBoxD.Location = New-Object System.Drawing.Size(50,100) 
21.
$objComboBoxD.Size = New-Object System.Drawing.Size(200,50) 
22.
$objComboBoxD.Height = 70  
23.
$objForm.Controls.Add($objComboBoxD) 
24.
$objForm.TopMost = $true 
25.
 
26.
#Drucker-Auflisten 
27.
 
28.
$objForm.Add_Load({ 
29.
    $objComboBoxD.Items.AddRange((Get-Printer | select -Expand Name)) 
30.
}) 
31.
$objComboBoxD.Add_SelectedIndexChanged({ 
32.
    [System.Windows.Forms.MessageBox]::Show((Get-Printer -Name $objComboBoxD.SelectedItem | fl * | out-string)) 
33.
}) 
34.
 
35.
# Start-Knopf --> Drucker festlegen 
36.
 
37.
$StartButton = New-Object System.Windows.Forms.Button 
38.
$StartButton.Location = New-Object System.Drawing.Size(400,100) 
39.
$StartButton.Size = New-Object System.Drawing.Size (75,25) 
40.
$StartButton.Text = "Start" 
41.
$StartButton.Add_Click( 
42.
43.
    $printer = $objComboBoxD.SelectedItem 
44.
    $printers = Get-Printer | ?{$_.FriendlyName -eq $printer} 
45.
    If($printers) 
46.
47.
        (Get-WmiObject -Query "Select * from Win32_Printer Where Name = '$printers'").setDefaultPrinter() 
48.
 
49.
        Write-Host "Der Standarddrucker wurde erfolgreich geändert." 
50.
51.
    Else 
52.
53.
        Write-Warning "Der Drucker kann nicht gefunden werden" 
54.
55.
}) 
56.
 
57.
$objForm.Controls.Add($StartButton) 
58.
 
59.
# Abbrechen-Knopf --> Vorgang beenden 
60.
 
61.
$CancelButton = New-Object System.Windows.Forms.Button 
62.
$CancelButton.Location = New-Object System.Drawing.Size(400,150) 
63.
$CancelButton.Size = New-Object System.Drawing.Size(75,25) 
64.
$CancelButton.Text = "Abbrechen" 
65.
$CancelButton.Name = "Abbrechen" 
66.
$CancelButton.DialogResult = "Cancel" 
67.
$CancelButton.Add_Click( 
68.
69.
$objForm.Close() 
70.
    [System.Windows.Forms.MessageBox]::Show(("Der Vorgang wurde abgebrochen")) 
71.
}) 
72.
$objForm.Controls.Add($CancelButton) 
73.
 
74.
# KeyDown Event (Enter and Escape) 
75.
 
76.
$objForm.KeyPreview = $true 
77.
$objForm.Add_KeyDown({if ($_.KeyCode -eq "Enter") {$objForm.DialogResult = "OK";$objForm.Close()} }) 
78.
$objForm.Add_KeyDown({if ($_.KeyCode -eq "Escape") 
79.
80.
$objForm.DialogResult = "Cancel";$objForm.Close()}  
81.
    [System.Windows.Forms.MessageBox]::Show(("Der Vorgang wurde abgebrochen")) 
82.
}) 
83.
 
84.
[void] $objForm.ShowDialog($objForm.Dialog.Result)
Mitglied: AndreasHoster
LÖSUNG 13.03.2018 um 17:30 Uhr
Ich weiß ja nicht wie Du einen Test Deines Programms machst, ich kriege zuerst mal die Warnung, das er den Drucker nicht findet.
Das kommt aus Zeile 44, es gibt kein Attribut FriendlyName bei den Objekten von Get-Printer (zumindestens nicht bei Win 8.1)
Also Zeile 44 so:
01.
$printers = Get-Printer | ?{$_.Name -eq $printer} 
Dann spuckt er mir folgenden Fehler aus:
01.
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat. 
02.
In Zeile:45 Zeichen:9 
03.
+         (Get-WmiObject -Query "Select * from Win32_Printer Where Name = '$printe ... 
04.
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
05.
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException 
06.
    + FullyQualifiedErrorId : InvokeMethodOnNull
Wenn man jetzt nach oder vor Deinem SetDefaultPrinter noch eine write-host $printer setzt, dann weiß man auch warum:
write-host $printer liefert nämlich als Ergebnis:
MSFT_Printer (Name = "Fax", ComputerName = "", Type = 0)

=> $printer ist ein Objekt und kein String, deswegen klappt auch der Select nicht.
Also den Namen aus dem Objekt holen und dann das Select mit dem Namen machen.

Dann sollte es gehen.
Bitte warten ..
Mitglied: 135531
14.03.2018 um 09:18 Uhr
Zitat von AndreasHoster:

Ich weiß ja nicht wie Du einen Test Deines Programms machst, ich kriege zuerst mal die Warnung, das er den Drucker nicht findet.
Das kommt aus Zeile 44, es gibt kein Attribut FriendlyName bei den Objekten von Get-Printer (zumindestens nicht bei Win 8.1)

=> $printer ist ein Objekt und kein String, deswegen klappt auch der Select nicht.
Also den Namen aus dem Objekt holen und dann das Select mit dem Namen machen.

Dann sollte es gehen.

Ersteinmal Danke für den Hinweis, dass es das Attribut Friendly Name unter Win8.1 Get-Printer Objekten nicht gibt.

Aber wie genau hole ich nun den Namen aus dem Objekt, und mache dann das select mit dem Namen? Wie gesagt, ich habe leider kaum Grundkenntnisse in diesem Thema...

lg Jannik
Bitte warten ..
Mitglied: AndreasHoster
LÖSUNG 14.03.2018 um 09:51 Uhr
01.
$printername = $Printers.Name 
02.
(Get-WmiObject -Query "Select * from Win32_Printer Where Name = '$printername'").setDefaultPrinter() 
Ginge auch in einer Zeile:
01.
(Get-WmiObject -Query "Select * from Win32_Printer Where Name = '$($Printers.Name)'").setDefaultPrinter() 
Und was es für Attribute und Methoden gibt, da hilft Get-Member bzw. die IntelliSense Funktion der Powershell ISE.
Die zeigt bei einem Objekt, wenn man den Punkt setzt und ein paar Millisekunden wartet, alle Attribute und Methoden an.
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

PowerShell GUI Skript ausführen durch "Start" Knopf

gelöst Frage von 135531Batch & Shell2 Kommentare

Hi all, ich bin absoluter Neuling im Thema PowerShell. Ich versuche derzeit eine GUI für DDA (Discrete Device Assignment) ...

Batch & Shell

PowerShell Skript Befehle richtig zuweisen(definieren)

gelöst Frage von 135531Batch & Shell5 Kommentare

Hi all, ich bin absoluter Neuling im Thema PowerShell. Ich versuche derzeit eine GUI für DDA (Discrete Device Assignment) ...

Batch & Shell

Cmd Befehle in Powershell GUI aufrufen

gelöst Frage von Markus2016Batch & Shell5 Kommentare

Hallo zusammen, ich brauche etwas Hilfe. In meiner erstellten GUI möchte ich ein paar Funktionen mit cmd Befehlen aufrufen. ...

Batch & Shell

PowerShell GUI, Variable in Klammern

gelöst Frage von JannikSvw7Batch & Shell4 Kommentare

Hallo Zusammen, ich möchte gern eine Variable in Klammern so definieren, dass der Inhalt der Variable in ein Befehl ...

Neue Wissensbeiträge
Windows 10

Mikrofon von Headset geht nach Update auf Windows 10 1803 nicht mehr

Tipp von Deepsys vor 1 TagWindows 101 Kommentar

Ich verwende ein Plantronics Headset das per USB mit dem Windows 10 PC verbunden ist. Damit kann ich auch ...

Video & Streaming

Ruckelfreies Fernsehen auf Smartphone oder Tablet - in SD oder gar HD - Eine Alternative zum Fritz DVB-C Receiver

Anleitung von power-user vor 2 TagenVideo & Streaming9 Kommentare

Wer kennt das nicht: Man möchte gemütlich auf dem Balkon sitzen und vielleicht grillen und dabei das WM-Spiel gucken ...

Erkennung und -Abwehr
Trendmicro WFBS 10 ist in deutsch verfügbar!
Tipp von VGem-e vor 2 TagenErkennung und -Abwehr4 Kommentare

Servus Kollegen, downloadbar unter

Windows Update

Microsoft Patchday Juni 2018 - BSOD, obwohl noch kein Patch freigegeben

Erfahrungsbericht von diemilz vor 2 TagenWindows Update8 Kommentare

Hallo zusammen, wir hatten hier letzte Woche ein massives Problem. Alles begann damit, dass ein Mitarbeiter kurz vor Feierabend ...

Heiß diskutierte Inhalte
Windows Userverwaltung
User Überwachung
gelöst Frage von YellowcakeWindows Userverwaltung38 Kommentare

Hey ich habe von unserem neuem Datenschutzbeauftragten ein kleines Horror Paket bekommen. Ich soll wenn es möglich ist, das ...

Windows Installation
Adobe Reader noch notwendig?
gelöst Frage von EitieOSWindows Installation26 Kommentare

Muss ich mir noch die Arbeit machen und den Adobe Reader installieren und aktuell halten, wenn doch in Win10 ...

Instant Messaging
Whats App Business am PC einsetzen
Frage von thomasreischerInstant Messaging15 Kommentare

Hallo zusammen, wir würden demnächst gerne WhatsApp Business verwenden um den Kontakt zwischen Kunden und Mitarbeitern zu erleichtern. Natürlich ...

Netzwerkmanagement
Druckprobleme bei Thin Clients und Netzwerkdruckern
Frage von hesperNetzwerkmanagement14 Kommentare

Morgen zusammen! Bei uns werden in den Außenstellen HP t520 Thin Clients an drei W2k16 Terminalserver mittels RDP eingesetzt. ...