Jump to content

Powershell GUI foreach menü


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Guten Tag,

ich versuche aktuell ein dynamisches Menü aus einer TXT zu erstellen.

Das Menü baut sich soweit korrekt zusammen jedoch passen sich die Click-Button nicht an.

 

[void] [System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms')
[void] [System.Reflection.Assembly]::LoadWithPartialName('System.Drawing')
[void] [System.Windows.Forms.Application]::EnableVisualStyles()
$WindowTitle = '*********'
$Title = '********'
$Icon = [system.drawing.icon]::ExtractAssociatedIcon($PSHOME + "\powershell.exe")

$Password = *******
$User = ******
$ComputerName = ********
$Command = "SSH Command"


$secpasswd = ConvertTo-SecureString $Password -AsPlainText -Force
$Credentials = New-Object System.Management.Automation.PSCredential($User, $secpasswd)

$SessionID = New-SSHSession -ComputerName $ComputerName -Credential $Credentials -AcceptKey

$Results = Invoke-SSHCommand -SessionId 0 -Command "****** list-instances | cut -f1 -d ':' --output-delimiter=' ' " 
echo $Results|select -ExpandProperty Output | Format-List  | Out-File -FilePath c:\test\Process.txt



# Main menu
$MenuBox = New-Object System.Windows.Forms.Form
$MenuBox.Size = New-Object System.Drawing.Size @(650,450)
$MenuBox.Text = $WindowTitle
$MenuBox.StartPosition = 'CenterScreen'
$MenuBox.MaximizeBox = $False
$MenuBox.AutoSize = $False
$MenuBox.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::Fixed3D
$MenuBox.Icon = $Icon
$MenuBox.BackgroundImage = $Image
$MenuBox.BackgroundImageLayout = 'None' # None, Tile, Center, Stretch, Zoom

# Exit Button
$ExitButton = New-Object System.Windows.Forms.Button
$ExitButton.Location = New-Object System.Drawing.Size(540,370)
$ExitButton.Size = New-Object System.Drawing.Size(75,23)
$ExitButton.Text = 'Exit'
$ExitButton.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",11,0,3,1)
$ExitButton.Add_Click({
    $MenuBox.Close()
})

# Main menu Header Text
$MenuHeader = New-Object System.Windows.Forms.Label
$MenuHeader.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",14,1,3,1)
$MenuHeader.Location = New-Object System.Drawing.Size(118,20)
$MenuHeader.Size = New-Object System.Drawing.Size(380,40) 
$MenuHeader.Text = $Title
$MenuHeader.BackColor = 'Transparent'
$MenuHeader.TextAlign = [System.Drawing.ContentAlignment]::TopCenter
$MenuBox.Controls.Add($MenuHeader)

# Main menu
$BoxLabel = New-Object System.Windows.Forms.Label
$BoxLabel.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",10,0,3,1)
$BoxLabel.Location = New-Object System.Drawing.Size(10,60) 
$BoxLabel.Size = New-Object System.Drawing.Size(680,20) 
$BoxLabel.Text = 'Select the category:'
$BoxLabel.BackColor = 'Transparent'
$MenuBox.Controls.Add($BoxLabel)

# AD menu
$ADBox = New-Object System.Windows.Forms.Form
$ADBox.Size = New-Object System.Drawing.Size @(650,450)
$ADBox.Text = $WindowTitle
$ADBox.StartPosition = 'CenterParent'
$ADBox.AutoSize = $False
$ADBox.MaximizeBox = $False
$ADBox.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::Fixed3D
$ADBox.Icon = $Icon
$ADBox.BackgroundImage = $Image

# AD menu
$Backup = New-Object System.Windows.Forms.Form
$Backup.Size = New-Object System.Drawing.Size @(650,450)
$Backup.Text = $WindowTitle
$Backup.StartPosition = 'CenterParent'
$Backup.AutoSize = $False
$Backup.MaximizeBox = $False
$Backup.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::Fixed3D
$Backup.Icon = $Icon
$Backup.BackgroundImage = $Image


# install menu
$install = New-Object System.Windows.Forms.Form
$install.Size = New-Object System.Drawing.Size @(650,450)
$install.Text = $WindowTitle
$install.StartPosition = 'CenterParent'
$install.AutoSize = $False
$install.MaximizeBox = $False
$install.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::Fixed3D
$install.Icon = $Icon
$install.BackgroundImage = $Image
#######Restart Menü#########

# Main menu button 1



# Main menu button 2
$Button2 = New-Object System.Windows.Forms.Button
$Button2.Location = New-Object System.Drawing.Size(62,100)
$Button2.Size = New-Object System.Drawing.Size(500,30)
$Button2.Add_Click({
    # Call Sub menu 1
    $MenuBox.Close()
    $MenuBox.Dispose()
    $ADBox.Topmost = $True
    $ADBox.Add_Shown({$ADBox.Activate()})
    [void] $ADBox.ShowDialog()
})
$Button2.Text = 'Server Restart'
$Button2.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",12,0,3,1)
$MenuBox.Controls.Add($Button2)

$MenuBox.Controls.Add($ExitButton)




$form=New-Object System.Windows.Forms.Form
function function-to-run{
    $this.ForeColor=$this.Tag
    write-host $this.Tag -fore  $this.Tag -back white
}

$arguments = get-content c:\test\Process.txt
$i=0
foreach ($arg in $arguments){
    $b=New-Object System.Windows.Forms.Button
    $b.Name=$arg
     $b.location="62,$(40*++$I)"
     $b.Size = New-Object System.Drawing.Size(500,30)
     $b.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",12,0,3,1)
     $b.Text="$arg"
     $b.Tag=$arg
     $b.Add_Click($Button_Click)
     $button_click = {write-host "hi $arg"}

    $form.controls.add($b)
    $ADBox.Controls.Add($b)
    $ADBox.Controls.Add($ExitButton1)

    }
# Show Menu
$MenuBox.Topmost = $True
$MenuBox.Add_Shown({$MenuBox.Activate()})
[void] $MenuBox.ShowDialog()

 

Link zu diesem Kommentar

Hallo,

 

kurz vorweg mit einfachen Handgriffen ist Dir nicht geholfen. Es sind einfach zu viele Fehler im Code. Daraus schlussfolgere ich, dass du vermutlich noch viel lernen wirst.

 

vor 2 Stunden schrieb Granatelbart:
$Title = '********' <- JA
$Password = ******* <- NEIN

 

Setze Strings immer in ' oder ".

 

vor 2 Stunden schrieb Granatelbart:
$SessionID = New-SSHSession -ComputerName $ComputerName -Credential $Credentials -AcceptKey
$Command = "SSH Command"

 

.. sind Variablen die NIE genutzt werden.

 

vor 2 Stunden schrieb Granatelbart:
$b.Add_Click($Button_Click)
$button_click = {write-host "hi $arg"}

Hier wird eine Variable ausgelesen, bevor sie überhaupt existiert.

 

vor 2 Stunden schrieb Granatelbart:
$ADBox.Controls.Add($ExitButton1)

.. das Gleiche hier. Es gibt kein $ExitButton1

 

vor 2 Stunden schrieb Granatelbart:
$install.BackgroundImage = $Image

... und hier..

 

vor 2 Stunden schrieb Granatelbart:
function function-to-run{
    $this.ForeColor=$this.Tag
    write-host $this.Tag -fore  $this.Tag -back white
}

... auch diese Funktion wird definiert, aber niemals aufgerufen.

 

Wenn ich Dir einen Tipp geben darf. Versuche es mal mit Visual Studio Code und den PowerShell Erweiterungen. Die werden Dir deine Fehler gleich zeigen und helfen dir mit Intellisense. Unterhalb möchte ich Dir zeigen, wie ein Script mit einer Funktion für Buttons aussehen kann. Fast Identisch kann das auch für deine Labels gebaut werden. Versuche Dich einfach mal.

 

#requires -Version 3.0

[void] [System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms')
[void] [System.Reflection.Assembly]::LoadWithPartialName('System.Drawing')
[void] [System.Windows.Forms.Application]::EnableVisualStyles()

  
#
# Functions
#

function CreateButton
{
  [OutputType([System.Windows.Forms.Button])]
  param
  (
    [Parameter(Mandatory)]
    [System.Drawing.Size]
    $Size, 
    
    [Parameter(Mandatory)]
    [System.Drawing.Size]
    $Location,
    
    [Parameter(Mandatory)]
    [string]
    $Text,
    
    [Parameter(Mandatory)]
    [scriptblock]
    $ClickEvent
  )
  
  $myButton = New-Object -TypeName System.Windows.Forms.Button
  $myButton.Location = $Location
  $myButton.Size = $Size
  $myButton.Text = $Text
  $myButton.Font = New-Object -TypeName System.Drawing.Font -ArgumentList ('Microsoft Sans Serif', 11, 0, 3, 1)
  $myButton.Add_Click($ClickEvent)
  
  return $myButton
}

 

Link zu diesem Kommentar

ja ich muss das Skript noch etwas aufräumen ist mir bewusst (mit unter weil ich am testen bin)

 

Diese genannten "Fehler" sind aber auch nicht mein derzeitiges Problem

 

Setze Strings immer in ' oder ". <<<< Das weiß ich wohl ist halt beim ersetzen durch * entfernt worden

 

[void] [System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms')
[void] [System.Reflection.Assembly]::LoadWithPartialName('System.Drawing')
[void] [System.Windows.Forms.Application]::EnableVisualStyles()
$WindowTitle = 'Certified-Bots Arkmanager'
$Title = 'Certified-Bots Arkmanager'


$Password = "++++++++++"
$User = "+++++++++"
$ComputerName = "+++++++++"


$Results = Invoke-SSHCommand -SessionId 0 -Command "arkmanager list-instances | cut -f1 -d ':' --output-delimiter=' ' " 
echo $Results|select -ExpandProperty Output | Format-List  | Out-File -FilePath c:\test\Process.txt



# Main menu
$MenuBox = New-Object System.Windows.Forms.Form
$MenuBox.Size = New-Object System.Drawing.Size @(650,450)
$MenuBox.Text = $WindowTitle
$MenuBox.StartPosition = 'CenterScreen'
$MenuBox.MaximizeBox = $False
$MenuBox.AutoSize = $False
$MenuBox.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::Fixed3D
$MenuBox.BackgroundImageLayout = 'None' # None, Tile, Center, Stretch, Zoom

# Exit Button
$ExitButton = New-Object System.Windows.Forms.Button
$ExitButton.Location = New-Object System.Drawing.Size(540,370)
$ExitButton.Size = New-Object System.Drawing.Size(75,23)
$ExitButton.Text = 'Exit'
$ExitButton.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",11,0,3,1)
$ExitButton.Add_Click({
    $MenuBox.Close()
})

# Exit Button
$ExitButton1 = New-Object System.Windows.Forms.Button
$ExitButton1.Location = New-Object System.Drawing.Size(540,370)
$ExitButton1.Size = New-Object System.Drawing.Size(75,23)
$ExitButton1.Text = 'Exit'
$ExitButton1.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",11,0,3,1)
$ExitButton1.Add_Click({
    $Backup.Close()
})

# Exit Button
$ExitButton2 = New-Object System.Windows.Forms.Button
$ExitButton2.Location = New-Object System.Drawing.Size(540,370)
$ExitButton2.Size = New-Object System.Drawing.Size(75,23)
$ExitButton2.Text = 'Exit'
$ExitButton2.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",11,0,3,1)
$ExitButton2.Add_Click({
    $ADBox.Close()
})


# Main menu Header Text
$MenuHeader = New-Object System.Windows.Forms.Label
$MenuHeader.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",14,1,3,1)
$MenuHeader.Location = New-Object System.Drawing.Size(118,20)
$MenuHeader.Size = New-Object System.Drawing.Size(380,40) 
$MenuHeader.Text = $Title
$MenuHeader.BackColor = 'Transparent'
$MenuHeader.TextAlign = [System.Drawing.ContentAlignment]::TopCenter
$MenuBox.Controls.Add($MenuHeader)

# Main menu
$BoxLabel = New-Object System.Windows.Forms.Label
$BoxLabel.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",10,0,3,1)
$BoxLabel.Location = New-Object System.Drawing.Size(10,60) 
$BoxLabel.Size = New-Object System.Drawing.Size(680,20) 
$BoxLabel.Text = 'Select the category:'
$BoxLabel.BackColor = 'Transparent'
$MenuBox.Controls.Add($BoxLabel)

# AD menu
$ADBox = New-Object System.Windows.Forms.Form
$ADBox.Size = New-Object System.Drawing.Size @(650,450)
$ADBox.Text = $WindowTitle
$ADBox.StartPosition = 'CenterParent'
$ADBox.AutoSize = $False
$ADBox.MaximizeBox = $False
$ADBox.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::Fixed3D

# Backup menu
$Backup = New-Object System.Windows.Forms.Form
$Backup.Size = New-Object System.Drawing.Size @(650,450)
$Backup.Text = $WindowTitle
$Backup.StartPosition = 'CenterParent'
$Backup.AutoSize = $False
$Backup.MaximizeBox = $False
$Backup.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::Fixed3D


#######Restart Menü#########

$Button2 = New-Object System.Windows.Forms.Button
$Button2.Location = New-Object System.Drawing.Size(62,100)
$Button2.Size = New-Object System.Drawing.Size(500,30)
$Button2.Add_Click({
    # Call Sub menu 1
    $MenuBox.Close()
    $MenuBox.Dispose()
    $ADBox.Topmost = $True
    $ADBox.Add_Shown({$ADBox.Activate()})
    [void] $ADBox.ShowDialog()
})
$Button2.Text = 'Server Restart'
$Button2.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",12,0,3,1)
$MenuBox.Controls.Add($Button2)

$MenuBox.Controls.Add($ExitButton1)
$form=New-Object System.Windows.Forms.Form
$arguments = get-content c:\test\Process.txt
$i=0

foreach ($arg in $arguments){
    $b=New-Object System.Windows.Forms.Button
    $b.Name=$arg
    $b.location="62,$(40*++$I)"
    $b.Size = New-Object System.Drawing.Size(500,30)
    $b.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",12,0,3,1)
    $b.Text=$arg
    $Button_Click1 = {write-host "Restart $arg"}
    $b.Add_Click($Button_Click1)
    $ADBox.Controls.Add($b)
    $ADBox.Controls.Add($ExitButton2)

    }


    #############BACKUP###########

# Main menu button 2
$Button1 = New-Object System.Windows.Forms.Button
$Button1.Location = New-Object System.Drawing.Size(62,140)
$Button1.Size = New-Object System.Drawing.Size(500,30)
$Button1.Add_Click({
    # Call Sub menu 1
    $MenuBox.Close()
    $MenuBox.Dispose()
    $Backup.Topmost = $True
    $Backup.Add_Shown({$Backup.Activate()})
    [void] $Backup.ShowDialog()
})
$Button1.Text = 'Server Backup'
$Button1.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",12,0,3,1)
$MenuBox.Controls.Add($Button1)

$MenuBox.Controls.Add($ExitButton)


$form=New-Object System.Windows.Forms.Form
$arguments1 = get-content c:\test\Process.txt
$i=0
foreach ($arg1 in $arguments1){
    $b=New-Object System.Windows.Forms.Button
    $b.Name=$arg
     $b.location="62,$(40*++$I)"
     $b.Size = New-Object System.Drawing.Size(500,30)
     $b.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",12,0,3,1)
     $b.Text=$arg1
     $b.Tag=$arg1
     $button_click2 = {write-host "Backup $arg1"}
     $b.Add_Click($Button_Click2)

    $form.controls.add($b)
    $Backup.Controls.Add($b)
    $Backup.Controls.Add($ExitButton1)
    $Backup.Controls.Add($BackButton)

    }



# Show Menu
$MenuBox.Topmost = $True
$MenuBox.Add_Shown({$MenuBox.Activate()})
[void] $MenuBox.ShowDialog()

 

 

vor 6 Minuten schrieb Granatelbart:
foreach ($arg in $arguments){
    $b=New-Object System.Windows.Forms.Button
    $b.Name=$arg
    $b.location="62,$(40*++$I)"
    $b.Size = New-Object System.Drawing.Size(500,30)
    $b.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",12,0,3,1)
    $b.Text=$arg
    $Button_Click1 = {write-host "Restart $arg"}
    $b.Add_Click($Button_Click1)
    $ADBox.Controls.Add($b)
    $ADBox.Controls.Add($ExitButton2)

    }

Mein Problem liegt eher in diesem Bereich. Ich generiere immer nur das Gleiche Event für die unterschiedlichen Button

 image.png.def950277ec078520821e31529a539c5.png

 

image.png.facd3265966353694dc354fa76ea53fc.png

bearbeitet von Granatelbart
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...