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-ID: 42017073569

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

Ausgedruckt am: 04.12.2024 um 08:12 Uhr

12168552861
12168552861 11.04.2024 aktualisiert um 11:51:41 Uhr
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ß
ERROR-40
ERROR-40 11.04.2024 aktualisiert um 12:12:52 Uhr
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
12168552861
Lösung 12168552861 11.04.2024, aktualisiert am 12.04.2024 um 16:07:16 Uhr
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.
it-frosch
it-frosch 11.04.2024 um 15:49:19 Uhr
Goto Top
Hallo Stefan,

hilft dir die BackupiImage Eigentschaft nicht weiter?

$Form.BackgroundImage

Grüße vom it-frosch
ERROR-40
Lösung ERROR-40 23.04.2024 um 09:13:07 Uhr
Goto Top
Ich habe jetzt am Ende das Logo-Skript über der Start des Timers eingefügt jetzt klappt es.