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, 306 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 rOMOP11Batch & 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 Netzwerk

CGM Praxisarchiv funktioniert auf Clients nach Update auf 4.14 nicht mehr

Tipp von MOS6581 vor 3 StundenWindows Netzwerk

Moin, ein Kunde setzt das CGM-Praxisarchiv ein. Mehrplatzinstallation mit SQL-Server. Nachdem letzte Woche auf die 4.14 aktualisiert wurde, funktionierte ...

Windows 10

Win 10 - Storage Sense - neues herstellerseitiges Cleaning-Tool statt cleanmgr

Tipp von mathu vor 9 StundenWindows 101 Kommentar

Vermutlich ab dem Oktoberrelease wird eine neue Speicherbereinigungssuftware ausgeliefert von Microsoft. Cleanmgr.exe soll angeblich aber noch weiter parallel verfügbar ...

E-Mail
Neueste Masche der Bad Guys: Offene Erpressung
Information von the-buccaneer vor 1 TagE-Mail14 Kommentare

"Warum den komplizierten Weg über einen Kryptotrojaner nehmen, wenn man die Leute auch direkt erpressen kann?" haben sich wohl ...

Viren und Trojaner
Neues ct-desinfect 2018 erschienen
Information von Lochkartenstanzer vor 1 TagViren und Trojaner

Moin, heise hat eine neues Sonderheft Desinfect veröffentlicht (9,90€/12,90€) . Falls jemand öfter mal Kisten "säubern" muß ist das ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
Kombiniere mehrere 4G Router zu einem Netzwerk - Anwendung kleine LAN (10-20 Leute)
Frage von HulkTheHeroLAN, WAN, Wireless22 Kommentare

Guten Mittag liebes Administrator - Fourm, ich hoffe ich habe das richtige Thema ausgewählt - ansonsten bitte gerne verschieben ...

Firewall
Blocken illegaler Film-Streams
gelöst Frage von CoreknabeFirewall20 Kommentare

Moin Wissende, unsere kleine Hochschule möchte gern das illegale Streaming von Kinofilmen und Serien unterbinden. Wir sperren bisher alle ...

Windows Server
2012 R2 Server Keine Anmeldung möglich Meldung: Laut den Sicherheitsrichtlinien auf diesem PC sollen informationen zur letzten interaktiven Anmeldung angezeigt werden
Frage von Speedy18A4Windows Server19 Kommentare

Hallo, ich habe vor einigen Wochen einen zweiten Domain Controller zu meiner Domain hinzugefügt. Funktionierte alles wunderbar. Auch die ...

iOS
Virus auf iphone
Frage von jensgebkeniOS17 Kommentare

hallo gemeinschaft, habe einen virus auf meinem iphone es kommen zwei meldungsfenster 1. online-2018-software-free.win 2. wpform.com - please click ...