Powershell GUI - Frage

Rugethan

Mitglied
Hallo zusammen,
Ich habe vor ein PowerShell Skript mit GUI zu machen.
Ohne GUI habe ich es hingekriegt, aber mit dem GUI komme ich nicht ganz klar.. Frage ganz unten.
Funktionierendes Skript ohne GUI:
------
Code:
#Erstellen File Neu | Variable setzen für Datei
New-Item C:\temp\pc-abfrage.txt -type file
$datei = "C:\temp\pc-abfrage.txt"

cls
write-host "---------------------------------------------------------"
write-host "---------Informationen über den Computer sammeln---------"
write-host "---------------------------------------------------------"
write-host ""
Write-Host "1. Informationen anzeigen"
Write-Host "2. Informationen in einem Text-File abspeichern"
Write-Host "3. Skript beenden"

do {
    
    $input = Read-Host "Treffen Sie eine Auswahl"
    switch ($input)
    {
          '1' {
               cls
               write-host "---------------------------------------------------------"
               write-host "---------Informationen über den Computer sammeln---------"
               write-host "---------------------------------------------------------"
               write-host ""
               Write-host "A. BIOS-Informationen anzeigen"
               Write-Host "B. Laufwerksinformationen anzeigen"
               Write-host "C. Füllstand der Laufwerke anzeigen"
               Write-host "D. Auslastung von CPU und RAM anzeigen"
               Write-host "E. Skript beenden"

               $input2 = Read-Host "Treffen Sie eine Auswahl"
               switch ($input2)
               {
                 'A'{
                    #BIOS - Aktualisierung alle 5s
                    cls
                    1..500 | % {Get-Wmiobject win32_bios ; sleep 5; cls };  
                    pause
                    }
                 'B'{
                    cls
                    Write-Host "Informationen über die Laufwerke: ";
                    Get-Wmiobject Win32_CDRomdrive;
                    pause
                    }
                 'C'{
                    cls
                    Write-host "Informationen über den Füllstand der Laufwerke: ";
                    1..500 | % {Get-Wmiobject Win32_Diskdrive ; sleep 5; cls };
                    pause
                    }
                 'D'{
                    cls
                    #Für RAM-Variable setzen, damit man eine übersichtliche Ausgabe erhält
                    function Get-MemoryUsage ($ComputerName=$ENV:ComputerName) {
                    if (Test-Connection -ComputerName $ComputerName -Count 1 -Quiet) {
                        $ComputerSystem = Get-WmiObject -ComputerName $ComputerName -Class Win32_operatingsystem -Property CSName, TotalVisibleMemorySize, FreePhysicalMemory
                        $FreePhysicalMemory = ($ComputerSystem.FreePhysicalMemory) / (1mb)
                        $TotalVisibleMemorySize = ($ComputerSystem.TotalVisibleMemorySize) / (1mb)
                        $TotalVisibleMemorySizeR = “{0:N2}” -f $TotalVisibleMemorySize
                        $TotalFreeMemPerc = ($FreePhysicalMemory/$TotalVisibleMemorySize)*100
                        $TotalFreeMemPercR = “{0:N2}” -f $TotalFreeMemPerc
                    “RAM: $TotalVisibleMemorySizeR GB”
                    “Noch verfügbarer RAM: $TotalFreeMemPercR %”
                    } }
                    write-host "--------------------------";
                    write-host "------Auslastung RAM------";
                    write-host "--------------------------";
                    Get-MemoryUsage;
                    #Auslastung CPU
                    write-host "--------------------------";
                    write-host "------Auslastung CPU------";
                    write-host "--------------------------";
                    Get-WmiObject win32_processor | select LoadPercentage  |fl;
                    #Eine Liste mit genaueren Detais zum Prozessor
                    write-host "--------------------------";
                    write-host "--Detailliertes Ergebnis--";
                    write-host "--------------------------";
                    Get-Wmiobject Win32_PerfRawData_PerfOS_Processor; sleep 5;
                    cls;
                    1..500 | % {
                    write-host "------Auslastung RAM------";
                    Get-MemoryUsage; 
                    write-host "------Auslastung CPU------";
                    Get-WmiObject win32_processor | select LoadPercentage  |fl;
                    sleep 5; cls };
                    pause 
                    }
                 
                 'E'{return
                    }}
          }
          '2' {
               cls
               write-host "---------------------------------------------------------"
               write-host "---------Informationen über den Computer sammeln---------"
               write-host "---------------------------------------------------------"
               write-host ""
               Write-host "A. BIOS-Informationen anzeigen"
               Write-Host "B. Laufwerksinformationen anzeigen"
               Write-host "C. Füllstand der Laufwerke anzeigen"
               Write-host "D. Auslastung von CPU und RAM anzeigen"
               Write-host "E. Löschen der Datei-Inhalte"
               Write-host "F. Skript beenden"

               $input2 = Read-Host "Treffen Sie eine Auswahl"
               switch ($input2)
               {
                 'A' {
                    cls
                    Get-Wmiobject win32_bios; 
                    #"Add-Content" fügt die Ausgabe der Befehle ins definierte Textdatei ein
                    "-------------------------------------" | Add-content $datei
                    Get-Wmiobject win32_bios | Add-content $datei
                    pause
                    }
                 'B'{
                    cls
                    Write-Host "Informationen über die Laufwerke: ";
                    Get-Wmiobject Win32_CDRomdrive;

                    "-------------------------------------" | Add-content $datei;
                    "Informationen über die Laufwerke: " | Add-content $datei;
                    Get-Wmiobject Win32_CDRomdrive | Add-content $datei
                    pause
                    }
                 'C'{
                    cls
                    Write-host "Informationen über den Füllstand der Laufwerke: ";
                    Get-Wmiobject Win32_Diskdrive;

                    "-------------------------------------" | Add-content $datei;
                    "Informationen über den Füllstand der Laufwerke: " | Add-content $datei;
                    Get-Wmiobject Win32_Diskdrive | Add-content $datei
                    pause
                    }
                 'D'{
                    cls
                    function Get-MemoryUsage ($ComputerName=$ENV:ComputerName) {
                    if (Test-Connection -ComputerName $ComputerName -Count 1 -Quiet) {
                        $ComputerSystem = Get-WmiObject -ComputerName $ComputerName -Class Win32_operatingsystem -Property CSName, TotalVisibleMemorySize, FreePhysicalMemory
                        $FreePhysicalMemory = ($ComputerSystem.FreePhysicalMemory) / (1mb)
                        $TotalVisibleMemorySize = ($ComputerSystem.TotalVisibleMemorySize) / (1mb)
                        $TotalVisibleMemorySizeR = “{0:N2}” -f $TotalVisibleMemorySize
                        $TotalFreeMemPerc = ($FreePhysicalMemory/$TotalVisibleMemorySize)*100
                        $TotalFreeMemPercR = “{0:N2}” -f $TotalFreeMemPerc
                    “RAM: $TotalVisibleMemorySizeR GB”
                    “Noch verfügbarer RAM: $TotalFreeMemPercR %”
                    } }
                    write-host "--------------------------";
                    write-host "------Auslastung RAM------";
                    write-host "--------------------------";
                    Get-MemoryUsage;
                    write-host "--------------------------";
                    write-host "------Auslastung CPU------";
                    write-host "--------------------------";
                    Get-WmiObject win32_processor | select LoadPercentage  |fl;
                    write-host "--------------------------";
                    write-host "--Detailliertes Ergebnis--";
                    write-host "--------------------------";
                    Get-Wmiobject Win32_PerfRawData_PerfOS_Processor;
                   
                    "--------------------------" | Add-content $datei;
                    "------Auslastung RAM------" | Add-content $datei;
                    "--------------------------" | Add-content $datei;
                    Get-MemoryUsage | Add-content $datei;
                    "--------------------------" | Add-content $datei;
                    "------Auslastung CPU------" | Add-content $datei;
                    "--------------------------" | Add-content $datei;
                    Get-WmiObject win32_processor | select LoadPercentage  |fl | Add-content $datei;
                    "--------------------------" | Add-content $datei;
                    "--Detailliertes Ergebnis--" | Add-content $datei;
                    "--------------------------" | Add-content $datei;
                    Get-Wmiobject Win32_PerfRawData_PerfOS_Processor | Add-content $datei
                    pause 
                    }
                 'E'{
                    #Löscht den Dateninhalt
                    Clear-content C:\temp\pc-abfrage.txt
                    }
                 'F'{return
                    }}
          } 
          '3' {
               cls
               exit
          } 
    }
  }
    while ($input -eq '3')
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB

Auszug halbfertiges Skript mit GUI:

BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB

Code:
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 

$objForm = New-Object System.Windows.Forms.Form 
$objForm.Text = "Abschlussprojekt"
$objForm.Size = New-Object System.Drawing.Size(300,200) 
$objForm.StartPosition = "CenterScreen"

$objForm.KeyPreview = $True
$objForm.Add_KeyDown({if ($_.KeyCode -eq "Enter") 
    {$x=$objListBox.SelectedItem;$objForm.Close()}})
$objForm.Add_KeyDown({if ($_.KeyCode -eq "Escape") 
    {$objForm.Close()}})

$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Size(75,120)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = "Ok"
$OKButton.Add_Click({$x=$objListBox.SelectedItem;$objForm.Close()})
$objForm.Controls.Add($OKButton)

$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Size(150,120)
$CancelButton.Size = New-Object System.Drawing.Size(75,23)
$CancelButton.Text = "Abbrechen"
$CancelButton.Add_Click({$objForm.Close()})
$objForm.Controls.Add($CancelButton)

$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(10,20) 
$objLabel.Size = New-Object System.Drawing.Size(280,20) 
$objLabel.Text = "Bitte treffen Sie eine Auswahl:"
$objForm.Controls.Add($objLabel) 

$objListBox = New-Object System.Windows.Forms.ListBox 
$objListBox.Location = New-Object System.Drawing.Size(10,40) 
$objListBox.Size = New-Object System.Drawing.Size(260,20) 
$objListBox.Height = 80

[void] $objListBox.Items.Add("Informationen nur anzeigen")
[void] $objListBox.Items.Add("Informationen anzeigen und abspeichern")



$objForm.Controls.Add($objListBox) 

$objForm.Topmost = $True

$objForm.Add_Shown({$objForm.Activate()})
[void] $objForm.ShowDialog()
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB

Meine Frage wäre nun, ob mir jemand behilflich sein kann und mir erklären kann wie ich das obige Skrip mit GUI erstellen kann. - Beim unteren Skript habe ich zwei ListBoxItems, wie kann ich denen Befehle zuordnen?

Vielen Dank schon im voraus.

Freundliche Grüsse
Anfänger Skripter
 
Zuletzt bearbeitet von einem Moderator:
Oben