Benutzer mit den meisten Antworten
Angemeldeter Benutzer mit GUI

Frage
-
Hallo zusammen,
ich versuche ein Script zu basteln welches mir bei Eingabe der Workstation anzeigt ob und welcher User angezeigt wird. Geht eigentlich relativ bequem mit
$Rechner = "localhost" Get-WmiObject Win32_ComputerSystem -ComputerName $Rechner | Select-Object Name,UserName
Wobei der "localhost" ja immer durch den Namen der Workstation ersetzt werden muss. Ich wollte das ganze nun in eine kleine GUI packen wo es ein Eingabefenster für die Workstation gibt. Allerdings erhalte ich keinen Output. Als Powershell-Anfänger stehe ich da auf´m Schlauch um die Eingabe mit der Funktion und Ausgabe zu verbinden.
Add-Type -AssemblyName System.Windows.Forms Add-Type -AssemblyName System.Drawing $window = New-Object System.Windows.Forms.Form $window.Width = 200 $window.Height = 150 $Label = New-Object System.Windows.Forms.Label $Label.Location = New-Object System.Drawing.Size(10,10) $Label.Text = "Workstation" $Label.AutoSize = $True $window.Controls.Add($Label) $windowTextBox = New-Object System.Windows.Forms.TextBox $windowTextBox.Location = New-Object System.Drawing.Size(10,30) $windowTextBox.Size = New-Object System.Drawing.Size(60,60) $window.Controls.Add($windowTextBox) $windowButton = New-Object System.Windows.Forms.Button $windowButton.Location = New-Object System.Drawing.Size(10,60) $windowButton.Size = New-Object System.Drawing.Size(45,25) $windowButton.Text = "OK" $windowButton.Add_Click({ $computerName = $windowTextBox.Text Get-WmiObject Win32_ComputerSystem -ComputerName $computerName | Select-Object Name,UserName Write-Host $users }) $window.Controls.Add($windowButton) [void]$window.ShowDialog()
Kann mir da jemand weiterhelfen oder hat sogar schon etwas fertiges für mich? Ich würde es ja über die "einfache" Variante machen, aber dazu wird die Abfrage zu oft benötigt.
Danke euch und Grüße,
Andreas
Antworten
-
So zusagen Computer ist erreichbar oder nicht und welcher User ist auf diesem gerade aktiv. Bin ich da mit dem Code wenigstens auf dem richtigen Weg?
.... hmmm kommt drauf an ... aber eher "nein" ... ;-) :-D
Die prinzipielle Erreichbarkeit kannst Du mit Test-Connection prüfen und wie gut Deine WMI-Abfrage dazu geeignet ist, einen angemeldeten Benutzer zu identifizieren, traue ich mich nicht zu beurteilen. Ich hatte da vor längerer Zeit mal was mit quser.exe gebastelt, dessen Ausgabe ich dann mit Powershell geparst hatte.
Edit: Falls Du doch mit GUIs weitermachen möchtest ... diese Doku soll ganz gut sein, hab ich gelesen: Learning GUI Toolmaking Series.
Live long and prosper!
(79,108,97,102|%{[char]$_})-join''
- Bearbeitet BOfH-666 Donnerstag, 23. Mai 2019 06:34
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Dienstag, 4. Juni 2019 11:18
- Als Antwort markiert Denniver ReiningMVP, Moderator Dienstag, 11. Juni 2019 09:25
-
Grundsätzlich ist es kein Problem, mit Window-Elementen zu arbeiten.
Natürlich ist das Layout u.U. nicht so ganz einfach, aber das ist ein anderes Problem.Wichtig zu wissen ist, dass das ganze Window-System ausschließlich Ereignisbasiert ist.
Die Zuordnung zu einem Ereignis solltest du in Unterfunktionien und nicht direkt als Skript einbetten, dadurch ist u.U. auch die Mehrfachverwendung möglich.
Hierbei ist die generelle Ereignis-Signatur:FunctionName(sender, eventArgs) {
}
Über den Sender bekommst du immer das Element (also z.B. den Button) und die eventArgs sind je nach Control mit unterschiedlichen Eigenschaften ausgestattet.
Somit kannst du statt Write-Host auch eine Listbox in den Dialog stellen, und dein Ergebnis da reinstellen oder auch anhängen.
Für solche Dinge eignet sich aber eher VisualStudioCode, da man auch ohne VisualStudio .Net-Programme erstellen kann. Die Compiler sind nämlich Bestandteil der .Net-Runtime.
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Dienstag, 4. Juni 2019 11:18
- Als Antwort markiert Denniver ReiningMVP, Moderator Dienstag, 11. Juni 2019 09:25
Alle Antworten
-
Hmmm .... ich bin kein großer Fan von GUIs für Powershell ... eine einfache Variante, eine Eingabe vom Anwender entgegenzuehmen wäre Read-Host. Das ist eine Zeile Code und das Ergebnis ist das gleiche.
Viel wichtiger fände ich, eventuelle Eingabe-Fehler abzufangen oder gar zu vermeiden. Was passiert, wenn der ComputerName falsch eingegeben wird ... wenn der abzufragende Computer gar nciht erreichbar ist ... wenn der Benutzer den Namen des Computers gar nicht kennt?
Live long and prosper!
(79,108,97,102|%{[char]$_})-join''
- Bearbeitet BOfH-666 Donnerstag, 23. Mai 2019 05:53
-
So zusagen Computer ist erreichbar oder nicht und welcher User ist auf diesem gerade aktiv. Bin ich da mit dem Code wenigstens auf dem richtigen Weg?
.... hmmm kommt drauf an ... aber eher "nein" ... ;-) :-D
Die prinzipielle Erreichbarkeit kannst Du mit Test-Connection prüfen und wie gut Deine WMI-Abfrage dazu geeignet ist, einen angemeldeten Benutzer zu identifizieren, traue ich mich nicht zu beurteilen. Ich hatte da vor längerer Zeit mal was mit quser.exe gebastelt, dessen Ausgabe ich dann mit Powershell geparst hatte.
Edit: Falls Du doch mit GUIs weitermachen möchtest ... diese Doku soll ganz gut sein, hab ich gelesen: Learning GUI Toolmaking Series.
Live long and prosper!
(79,108,97,102|%{[char]$_})-join''
- Bearbeitet BOfH-666 Donnerstag, 23. Mai 2019 06:34
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Dienstag, 4. Juni 2019 11:18
- Als Antwort markiert Denniver ReiningMVP, Moderator Dienstag, 11. Juni 2019 09:25
-
...wie gut Deine WMI-Abfrage dazu geeignet ist, einen angemeldeten Benutzer zu identifizieren, traue ich mich nicht zu beurteilen. Ich hatte da vor längerer Zeit mal was mit quser.exe gebastelt, dessen Ausgabe ich dann mit Powershell geparst hatte.
Evgenij Smirnov
-
Grundsätzlich ist es kein Problem, mit Window-Elementen zu arbeiten.
Natürlich ist das Layout u.U. nicht so ganz einfach, aber das ist ein anderes Problem.Wichtig zu wissen ist, dass das ganze Window-System ausschließlich Ereignisbasiert ist.
Die Zuordnung zu einem Ereignis solltest du in Unterfunktionien und nicht direkt als Skript einbetten, dadurch ist u.U. auch die Mehrfachverwendung möglich.
Hierbei ist die generelle Ereignis-Signatur:FunctionName(sender, eventArgs) {
}
Über den Sender bekommst du immer das Element (also z.B. den Button) und die eventArgs sind je nach Control mit unterschiedlichen Eigenschaften ausgestattet.
Somit kannst du statt Write-Host auch eine Listbox in den Dialog stellen, und dein Ergebnis da reinstellen oder auch anhängen.
Für solche Dinge eignet sich aber eher VisualStudioCode, da man auch ohne VisualStudio .Net-Programme erstellen kann. Die Compiler sind nämlich Bestandteil der .Net-Runtime.
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Dienstag, 4. Juni 2019 11:18
- Als Antwort markiert Denniver ReiningMVP, Moderator Dienstag, 11. Juni 2019 09:25