error-40
Goto Top

Powershell GUI Bild einfügen

Guten Tag zusammen,
Ich habe eine Frage und zwar habe ich ein GUI und möchte auf dieses Gerne ein Logo 32*32 Pixel haben.
Und zwar habe ich schon versucht etwas versucht auf ´´Base64´´ aber es wird mir nicht angezeigt.
->Es wird auch keine Fehlermeldung gegeben
Was muss ich an dem Code ändern das das Logo eingeblendet wird?
Code von der Gui:
Function Create-GetSchedTime {
    Param( $SchedTime )
    $script:StartTime = (Get-Date).AddSeconds($TotalTime)
    $RestartDate = ((get-date).AddSeconds($TotalTime)).AddMinutes(-1)

    $RDate = Get-Date $RestartDate -Format 'dd/MM/yyyy'  
    $RTime = Get-Date $RestartDate -Format 'HH:mm'  

    return @{
        StartTime = $script:StartTime
        RestartDate = $RestartDate
        RDate = $RDate
        RTime = $RTime
    }
    #& C:\Windows\System32\schtasks.exe /delete /tn "Post Maintenance Restart" /f  
    & C:\Windows\System32\schtasks.exe /create /sc once /tn "Post Maintenance Restart" /tr "'C:\Windows\system32\cmd.exe' /c shutdown /r /t 400" /SD $RDate /ST $RTime /f  
}

[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null  
[System.Reflection.Assembly]::LoadWithPartialName( "Microsoft.VisualBasic") | Out-Null  

$Title = "Nachricht vom IT-Helpdesk - Aktion erforderlich"  
$Message = "Um die Installation von Windows-Updates abzuschließen, ist ein Neustart des Systems unerlässlich. Eine einfache Herunterfahrt genügt nicht. Bitte führen Sie einen Neustart durch."  
$Button1Text = "Jetzt neu starten"  
$Button2Text = "4 Std. Aufschub"  
$Button3Text = "8 Std. Aufschub"  

$FormColor = 'White'  
$Form = $null
$Button1 = $null
$Button2 = $null
$Label = $null
$TextBox = $null
$Result = $null

$timerUpdate = New-Object 'System.Windows.Forms.Timer'  
$TotalTime = 3600 #in seconds

Create-GetSchedTime -SchedTime $TotalTime
#Create-GetSchedTime -SchedTime $TotalTime

$timerUpdate_Tick={
    # Define countdown timer
    [TimeSpan]$span = $script:StartTime - (Get-Date)

    # Update the display
    $hours = "{0:00}" -f $span.Hours  
    $mins = "{0:00}" -f $span.Minutes  
    $secs = "{0:00}" -f $span.Seconds  
    $labelTime.Text = "{0}:{1}:{2}" -f $hours, $mins, $secs  

    $timerUpdate.Start()

    if ($span.TotalSeconds -le 0) {
        $timerUpdate.Stop()
        & C:\Windows\System32\schtasks.exe /delete /tn "Post Maintenance Restart" /f  
        shutdown /r /t 0
    }
}

$Form_StoreValues_Closing= {
    #Store the control values
}

$Form_Cleanup_FormClosed= {
    #Remove all event handlers from the controls
    try {
        $Form.remove_Load($Form_Load)
        $timerUpdate.remove_Tick($timerUpdate_Tick)
        #$Form.remove_Load($Form_StateCorrection_Load)
        $Form.remove_Closing($Form_StoreValues_Closing)
        $Form.remove_FormClosed($Form_Cleanup_FormClosed)
    } catch [Exception] {
    }
}

# Form
$Form = New-Object -TypeName System.Windows.Forms.Form
$Form.Text = $Title
$Form.Size = New-Object -TypeName System.Drawing.Size(500,220) # Erhöhen der Formulargröße
$Form.StartPosition = "CenterScreen"  
$Form.ControlBox = $False
$Form.Topmost = $true
$Form.KeyPreview = $true
$Form.ShowInTaskbar = $False
$Form.FormBorderStyle = "FixedDialog"  
$Form.MaximizeBox = $False
$Form.MinimizeBox = $False
$Form.BackColor = $FormColor

$Icon = [system.drawing.icon]::ExtractAssociatedIcon("c:\Windows\System32\UserAccountControlSettings.exe")  
$Form.Icon = $Icon

# Button One (Reboot/Shutdown Now)
$Button1 = New-Object -TypeName System.Windows.Forms.Button
$Button1.Size = New-Object -TypeName System.Drawing.Size(150,40) # Erhöhen der Button-Größe
$Button1.Location = New-Object -TypeName System.Drawing.Size(20,140) # Verschieben des Buttons nach rechts
$Button1.Text = $Button1Text
$Button1.Font = 'Tahoma, 10pt'  
$Button1.Add_Click({
    & C:\Windows\System32\schtasks.exe /delete /tn "Post Maintenance Restart" /f  
    shutdown /r /t 0
    $Form.Close()
})
$Form.Controls.Add($Button1)

# Button Two (Postpone for 4 Hours)
$Button2 = New-Object -TypeName System.Windows.Forms.Button
$Button2.Size = New-Object -TypeName System.Drawing.Size(150,40) # Erhöhen der Button-Größe
$Button2.Location = New-Object -TypeName System.Drawing.Size(175,140) # Zentrieren des Buttons
$Button2.Text = $Button2Text
$Button2.Font = 'Tahoma, 10pt'  
$Button2.Add_Click({
    $Button2.Enabled = $False
    $timerUpdate.Stop()
    $TotalTime = 14400
    #$TotalTime = 120
    Create-GetSchedTime -SchedTime $TotalTime
    $timerUpdate.add_Tick($timerUpdate_Tick)
    $timerUpdate.Start()
})
$Form.Controls.Add($Button2)

# Button Three (Postpone for 8 Hours)
$Button3 = New-Object -TypeName System.Windows.Forms.Button
$Button3.Size = New-Object -TypeName System.Drawing.Size(150,40) # Erhöhen der Button-Größe
$Button3.Location = New-Object -TypeName System.Drawing.Size(330,140) # Verschieben des Buttons nach links
$Button3.Text = $Button3Text
$Button3.Font = 'Tahoma, 10pt'  
$Button3.Add_Click({
    $Button3.Enabled = $False
    $timerUpdate.Stop()
    $TotalTime = 28800
    #$TotalTime = 120
    Create-GetSchedTime -SchedTime $TotalTime
    $timerUpdate.add_Tick($timerUpdate_Tick)
    $timerUpdate.Start()
})
$Form.Controls.Add($Button3)

# Label
$Label = New-Object -TypeName System.Windows.Forms.Label
$Label.Size = New-Object -TypeName System.Drawing.Size(475,60)
$Label.Location = New-Object -TypeName System.Drawing.Size(10,10)
$Label.Text = $Message
$Label.Font = 'Tahoma, 10pt'  
$Form.Controls.Add($Label)

# Label2
$Label2 = New-Object -TypeName System.Windows.Forms.Label
$Label2.Size = New-Object -TypeName System.Drawing.Size(355,30)
$Label2.Location = New-Object -TypeName System.Drawing.Size(10,100)
$Label2.Text = $Message2
$label2.Font = 'Tahoma, 10pt'  
$Form.Controls.Add($Label2)

# labelTime
$labelTime = New-Object 'System.Windows.Forms.Label'  
$labelTime.AutoSize = $True
$labelTime.Font = 'Arial, 26pt, style=Bold'  
$labelTime.Location = '175, 65' # Setzen Sie den Timer in die Mitte des Fensters  
$labelTime.Name = 'labelTime'  
$labelTime.Size = '43, 15'  
$labelTime.TextAlign = 'MiddleCenter'  
$labelTime.ForeColor = '242, 103, 34'  
$Form.Controls.Add($labelTime)

# Start the timer
$timerUpdate.add_Tick($timerUpdate_Tick)
$timerUpdate.Start()

# Show
$Form.Add_Shown({$Form.Activate()})
# Clean up the control events
$Form.add_FormClosed($Form_Cleanup_FormClosed)
# Store the control values when the form is closing
$Form.add_Closing($Form_StoreValues_Closing)
# Show the Form
$Form.ShowDialog() | Out-Null

Code vom einzufügenden Bild:
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.Application]::EnableVisualStyles()

$Form            = New-Object system.Windows.Forms.Form
$Form.ClientSize = '400,230'  
$Form.text       = "Test"  
$Form.TopMost    = $false

# This base64 string holds the bytes that make up the orange 'G' icon (just an example for a 32x32 pixel image)  
$iconBase64      = 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTnU1rJkAAAB50lEQVRIS7WWzytEURTHZ2FhaWFhYWFhYWFhaWFh6c+wsGCapJBJU0hRSrOgLBVSmkQoSpqyUJISapIFJU0i1KQp1PG9826vO9+Z97Pr22dz3pxzv/PO/fUSkvxfOLYOx9bh2DocBzPZKlPtku2VuS7JtMlwIydUw7EnGO50Rd4ehPRdlru87GWUMZVU4LgOqLza0cP56PdHNga4NthgsUc+i3qIQOH9qDzAYLZTyiVd7Ah/8/lGztclNyLbY5JfksKxeuiKRvAzwOy93OsyR+9Pam6HajLHm5UfXhTQT34GqDH1eCGjTZxjkmqQmQ5+6Gdgth5NQLsoIRwca7AoTZ1k1UM0p7Y/QXCsof4sdOvRrRlgeZgyu49eY/0cTDO76ShzcJnTQ0O0NvA2XioWqjIrcKy5PdQ1kLl90CKsVC9F2GiYVVPuiQaDiRb1TzGWw9eHzoEiGGwO6hpHWFRe04vuu4pggCPIFPwowSWmAXa/qdKr5zaOaQBwyps6W+UEh/gGtasFlrjCKC2+ATia15WucHpf76vna/2ylVLntnmeRzbApsUQ4RXZwAFnAC7eMMLNSrWhDEC6RfUac1D3+sRew87HhVzvC4PjYLBecRxhDsByn/qEoYRqOLYOx9bh2DocWyaZ+APgBBKhVfsHwAAAAABJRU5ErkJggg=='  
$iconBytes       = [Convert]::FromBase64String($iconBase64)
# initialize a Memory stream holding the bytes
$stream          = [System.IO.MemoryStream]::new($iconBytes, 0, $iconBytes.Length)
$Form.Icon       = [System.Drawing.Icon]::FromHandle(([System.Drawing.Bitmap]::new($stream).GetHIcon()))


Ich freue mich wenn mir einer Weiterhelfen könnte und noch erklären wie das ganze Funktuniert=)
Mit Freundlichen Grüßen
Stefan

Content-Key: 42017073569

Url: https://administrator.de/contentid/42017073569

Printed on: April 29, 2024 at 22:04 o'clock

Mitglied: 12168552861
12168552861 Apr 11, 2024 updated at 09:51:41 (UTC)
Goto Top
Einfach ne Picturebox nehmen
https://learn.microsoft.com/de-de/dotnet/api/system.windows.forms.pictur ...

Add-Type -A System.Windows.Forms
Add-Type -A System.Drawing
$iconBase64 = 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTnU1rJkAAAB50lEQVRIS7WWzytEURTHZ2FhaWFhYWFhYWFhaWFh6c+wsGCapJBJU0hRSrOgLBVSmkQoSpqyUJISapIFJU0i1KQp1PG9826vO9+Z97Pr22dz3pxzv/PO/fUSkvxfOLYOx9bh2DocBzPZKlPtku2VuS7JtMlwIydUw7EnGO50Rd4ehPRdlru87GWUMZVU4LgOqLza0cP56PdHNga4NthgsUc+i3qIQOH9qDzAYLZTyiVd7Ah/8/lGztclNyLbY5JfksKxeuiKRvAzwOy93OsyR+9Pam6HajLHm5UfXhTQT34GqDH1eCGjTZxjkmqQmQ5+6Gdgth5NQLsoIRwca7AoTZ1k1UM0p7Y/QXCsof4sdOvRrRlgeZgyu49eY/0cTDO76ShzcJnTQ0O0NvA2XioWqjIrcKy5PdQ1kLl90CKsVC9F2GiYVVPuiQaDiRb1TzGWw9eHzoEiGGwO6hpHWFRe04vuu4pggCPIFPwowSWmAXa/qdKr5zaOaQBwyps6W+UEh/gGtasFlrjCKC2+ATia15WucHpf76vna/2ylVLntnmeRzbApsUQ4RXZwAFnAC7eMMLNSrWhDEC6RfUac1D3+sRew87HhVzvC4PjYLBecRxhDsByn/qEoYRqOLYOx9bh2DocWyaZ+APgBBKhVfsHwAAAAABJRU5ErkJggg=='    
$stream = [System.IO.MemoryStream]::new([Convert]::FromBase64String($iconBase64))
$img =  [System.Drawing.Image]::FromStream($stream)
$form = [System.Windows.Forms.Form]@{
    ClientSize = '200,200'  
    Text = "Image in Picturebox"  
}
$pbox = [System.Windows.Forms.PictureBox]@{
    Location = '10,10'  
    Size = '32,32'  
    Image = $img
}
$form.Controls.Add($pbox)
[void]$form.ShowDialog()
$img.Dispose()
$stream.Dispose()

Oder via Paint-Eventhandler direkt auf die Form zeichnen

Add-Type -A System.Windows.Forms
Add-Type -A System.Drawing
$iconBase64 = 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTnU1rJkAAAB50lEQVRIS7WWzytEURTHZ2FhaWFhYWFhYWFhaWFh6c+wsGCapJBJU0hRSrOgLBVSmkQoSpqyUJISapIFJU0i1KQp1PG9826vO9+Z97Pr22dz3pxzv/PO/fUSkvxfOLYOx9bh2DocBzPZKlPtku2VuS7JtMlwIydUw7EnGO50Rd4ehPRdlru87GWUMZVU4LgOqLza0cP56PdHNga4NthgsUc+i3qIQOH9qDzAYLZTyiVd7Ah/8/lGztclNyLbY5JfksKxeuiKRvAzwOy93OsyR+9Pam6HajLHm5UfXhTQT34GqDH1eCGjTZxjkmqQmQ5+6Gdgth5NQLsoIRwca7AoTZ1k1UM0p7Y/QXCsof4sdOvRrRlgeZgyu49eY/0cTDO76ShzcJnTQ0O0NvA2XioWqjIrcKy5PdQ1kLl90CKsVC9F2GiYVVPuiQaDiRb1TzGWw9eHzoEiGGwO6hpHWFRe04vuu4pggCPIFPwowSWmAXa/qdKr5zaOaQBwyps6W+UEh/gGtasFlrjCKC2+ATia15WucHpf76vna/2ylVLntnmeRzbApsUQ4RXZwAFnAC7eMMLNSrWhDEC6RfUac1D3+sRew87HhVzvC4PjYLBecRxhDsByn/qEoYRqOLYOx9bh2DocWyaZ+APgBBKhVfsHwAAAAABJRU5ErkJggg=='    
$stream = [System.IO.MemoryStream]::new([Convert]::FromBase64String($iconBase64))
$img =  [System.Drawing.Image]::FromStream($stream)
$form = [System.Windows.Forms.Form]@{
    ClientSize = '200,200'  
    Text = "Image on Form"  
}
$form.add_Paint({
    $_.Graphics.DrawImage($img,10,10,32,32)
})
[void]$form.ShowDialog()
$img.Dispose()
$stream.Dispose()

Gruß
Member: ERROR-40
ERROR-40 Apr 11, 2024 updated at 10:12:52 (UTC)
Goto Top
Hey Ich Danke dir für deine Antwort,
Ich habe den code mal eingefügt nur verzeiht sich so das Komplette GUI, das GUI funktuniert gar nicht mehr oder es wird nur das Bild zuerst ausgegeben dieses schließe ich und danach läuft das Script Normal weiter....
Wo muss man diesen Code einfügen das das GUI nicht beeinträchtigt wird?
Bzw
Muss ich irgendwas an meinem Skript abändern?
Funktuniert einfach der Code nicht mit der Photobox?

MFG Stefan
powershell probleme
skript powershell problem
Mitglied: 12168552861
Solution 12168552861 Apr 11, 2024, updated at Apr 12, 2024 at 14:07:16 (UTC)
Goto Top
OMG 😂 ...... kann man sich anstellen, das kommt wenn man nur Copy n Paste macht ohne den Code zu erst mal zu lesen und zu verstehen. Das war natürlich nur eine komplette Beispiel-Form um zu zeigen wie man ein Bild in eine Form einfügt!!!! Du brauchst daraus natürlich nur das Control für die Picturebox nicht die ganze Form 🙈🙈

Du brauchst also nur den Teil: (Position des Bildes natürlich im Picturebox Objekt an eigene Bedürfnisse anpassen, sonst wird es vom Textfeld verdeckt )
Add-Type -A System.Drawing
# Bild erzeugen
$iconBase64 = 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTnU1rJkAAAB50lEQVRIS7WWzytEURTHZ2FhaWFhYWFhYWFhaWFh6c+wsGCapJBJU0hRSrOgLBVSmkQoSpqyUJISapIFJU0i1KQp1PG9826vO9+Z97Pr22dz3pxzv/PO/fUSkvxfOLYOx9bh2DocBzPZKlPtku2VuS7JtMlwIydUw7EnGO50Rd4ehPRdlru87GWUMZVU4LgOqLza0cP56PdHNga4NthgsUc+i3qIQOH9qDzAYLZTyiVd7Ah/8/lGztclNyLbY5JfksKxeuiKRvAzwOy93OsyR+9Pam6HajLHm5UfXhTQT34GqDH1eCGjTZxjkmqQmQ5+6Gdgth5NQLsoIRwca7AoTZ1k1UM0p7Y/QXCsof4sdOvRrRlgeZgyu49eY/0cTDO76ShzcJnTQ0O0NvA2XioWqjIrcKy5PdQ1kLl90CKsVC9F2GiYVVPuiQaDiRb1TzGWw9eHzoEiGGwO6hpHWFRe04vuu4pggCPIFPwowSWmAXa/qdKr5zaOaQBwyps6W+UEh/gGtasFlrjCKC2+ATia15WucHpf76vna/2ylVLntnmeRzbApsUQ4RXZwAFnAC7eMMLNSrWhDEC6RfUac1D3+sRew87HhVzvC4PjYLBecRxhDsByn/qEoYRqOLYOx9bh2DocWyaZ+APgBBKhVfsHwAAAAABJRU5ErkJggg=='      
$stream = [System.IO.MemoryStream]::new([Convert]::FromBase64String($iconBase64))
$img =  [System.Drawing.Image]::FromStream($stream)

# picturebox mit Bild erzeugen
$pbox = [System.Windows.Forms.PictureBox]@{
    Location = '10,10'    
    Size = '32,32'    
    Image = $img
}
# control der Form hinzufügen.
$Form.Controls.Add($pbox)

Röhrich würde jetzt sagen, Hände weg vom Allohol und ab in die Berufsschule face-smile.
Member: it-frosch
it-frosch Apr 11, 2024 at 13:49:19 (UTC)
Goto Top
Hallo Stefan,

hilft dir die BackupiImage Eigentschaft nicht weiter?

$Form.BackgroundImage

Grüße vom it-frosch
Member: ERROR-40
Solution ERROR-40 Apr 23, 2024 at 07:13:07 (UTC)
Goto Top
Ich habe jetzt am Ende das Logo-Skript über der Start des Timers eingefügt jetzt klappt es.