none
Angemeldeter Benutzer mit GUI RRS feed

  • 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

    Donnerstag, 23. Mai 2019 05:30

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''



    Donnerstag, 23. Mai 2019 06:30
  • 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.

    Donnerstag, 23. Mai 2019 08:15

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
    Donnerstag, 23. Mai 2019 05:53
  • Moin Moin BOfH,

    klingt in jedem Fall interessant. 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?

    Grüße,
    Andreas

    Donnerstag, 23. Mai 2019 06:06
  • 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''



    Donnerstag, 23. Mai 2019 06:30
  • ...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.

    Solange die User sich nur per Konsole und nicht per RDP anmelden, macht die WMI-Abfrage was sie soll. Will man auch RDP abdecken, da hätte ich "QUSER für PowerShellistas" anzubieten: https://it-pro-berlin.de/rdexsessioninfo-de/

    Evgenij Smirnov

    http://evgenij.smirnov.de

    Donnerstag, 23. Mai 2019 07:31
  • 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.

    Donnerstag, 23. Mai 2019 08:15