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, 394 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 GUI WPF

gelöst Frage von derhoeppiBatch & Shell18 Kommentare

Hallo, heute habe ich hoffentlich wieder ein einfaches Thema. Und zwar besitzt meiner GUI (WPF) einige Checkboxen und auch ...

Batch & Shell

Powershell Neustart GUI

gelöst Frage von 136430Batch & Shell9 Kommentare

Hallo ich möchte in einer GUI einem User einen Neustart eines Remotecomputers zur Verfügung stellen, der user führt das ...

Batch & Shell

Powershell Befehl ausführen mit GUI u. Consolen Umleitung zu Textbox?

gelöst Frage von BuggerBatch & Shell12 Kommentare

Hallo, ich habe zwei Fragen: 1. Wenn ich auf den OK Button drücke passiert nichts, erst wenn die GUI ...

Neue Wissensbeiträge
Humor (lol)
Administrator.de Perlen
Tipp von DerWindowsFreak2 vor 3 TagenHumor (lol)6 Kommentare

Hallo, Heute beim stöbern auf dieser Seite bin auf folgenden Thread aus dem Jahre 2006 gestossen: Was meint ihr? ...

Erkennung und -Abwehr
OpenSSH-Backdoor Malware erkennen
Tipp von Frank vor 4 TagenErkennung und -Abwehr

Sicherheitsforscher von Eset haben 21 Malware-Familien untersucht. Die Malware soll Hintertüren via OpenSSH bereitstellen, so dass Angreifer Fernzugriff auf ...

iOS
WatchChat für Whatsapp
Tipp von Criemo vor 7 TageniOS5 Kommentare

Ziemlich coole App für WhatsApp User in Verbindung mit der Apple Watch. Gibts für iOS sowohl als auch für ...

iOS
IOS hat nen Cursor!
Tipp von Criemo vor 7 TageniOS5 Kommentare

Nette Funktion im iOS. iPhone-Mauszeiger aktivieren „Nichts ist nerviger, als bei einem Tippfehler zu versuchen, den iOS-Cursor an die ...

Heiß diskutierte Inhalte
Windows Server
Dienstnamen und oder Deutsche und Englische Beschreibung in services.msc gleichzeitig anzeigen
gelöst Frage von vafk18Windows Server23 Kommentare

Guten Morgen, die Suche nach Diensten in services.msc gestaltet sich immer wieder schwierig, weil mir je nach Aufgabe die ...

Windows Server
Kleine Umfrage: Windows Server Desktop oder Core?
Frage von doomfreakWindows Server18 Kommentare

Hey :) Ich wollte mal eine kleine Umfrage hier starten. Ich bin schon etwas länger auf dieser Seite hier ...

JavaScript
Javascript: WebSql
gelöst Frage von internet2107JavaScript17 Kommentare

Guten Morgen zusammen, zunächst einmal einen schönen dritten Advent. Ich habe ein Problem mit Javascript und WebSQL. Bisher habe ...

Microsoft
Lizenzplausibilisierung oder Spam?
Frage von lordimacMicrosoft14 Kommentare

Liebe Forengemeinde, uns erreichte die Tage eine Mail bezüglich einer Lizenzplausibilisierung durch einen Microsoft SAM Partner. Die Meldung im ...