Script zur Installation von Programmen
Hallo zusammen,
seid langem habe ich nun endlich mal wieder Zeit gefunden mich mit Powershell zu beschäftigen.
Mein Script funktioniert auch soweit....
Ich finde nur keine Lösung den objForm.ShowDialog automatisch zu schließen, bzw. mit objForm.Show das eingebaute animierte *.gif bewegt darzustellen.
Gibt es für die eine, oder die andere Variante eine Möglichkeit?
Mein Ansatz funktioniert leider nicht.
Fehlermeldung: Für "ShowDialog" und die folgende Argumentezahl kann keine Überladung gefunden werden: "1"
$objForm.ShowDialog({if (Get-Job -state Completed){$objForm.Close()}}) | Out-Null
Ich habe mein Script auch mal mit einer Hash-Tabelle ausprobiert.
Leider kann bei der Hash-Tabelle mittels Wait-Job, Receive-Job und Remove-Job der Job nicht abgefragt werden.
Hierzu finde ich leider auch bei Google nichts um dies zu verstehen.
Gibt es für Neulinge eine Erklärung zu diesem Thema?
Vielen Dank im Voraus für Eure Unterstützung.
Schöne Grüße
Markus2016
seid langem habe ich nun endlich mal wieder Zeit gefunden mich mit Powershell zu beschäftigen.
Mein Script funktioniert auch soweit....
Ich finde nur keine Lösung den objForm.ShowDialog automatisch zu schließen, bzw. mit objForm.Show das eingebaute animierte *.gif bewegt darzustellen.
Gibt es für die eine, oder die andere Variante eine Möglichkeit?
Mein Ansatz funktioniert leider nicht.
Fehlermeldung: Für "ShowDialog" und die folgende Argumentezahl kann keine Überladung gefunden werden: "1"
$objForm.ShowDialog({if (Get-Job -state Completed){$objForm.Close()}}) | Out-Null
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
$Bild =
@(
"$PSScriptRoot\Bilder\Bild_01.ico"
"$PSScriptRoot\Bilder\Bild_02.png"
"$PSScriptRoot\Bilder\Bild_03.png"
"$PSScriptRoot\Bilder\loader.gif"
"$PSScriptRoot\Bilder\ok.png"
"$PSScriptRoot\Bilder\nok.png"
)
$Name =
@(
"Visual C++ 2010 x64 Redistributable"
"Visual C++ 2015 x64 Redistributable"
)
$Process=
@(
{Start-Process "C:\Software\Microsoft\Visual C++ 2010 x64 Redistributable\VisualC++Redistributable.vbs" -Wait }
{Start-Process "C:\Software\Microsoft\Visual C++ 2015 x64 Redistributable\VisualC++Redistributable.vbs" -Wait }
)
$Text_X=
@(
345
345
)
$Text_Y=
@(
80
100
)
$Image_X=
@(
585
585
)
$Image_Y=
@(
80
100
)
# Fenster
$objForm = New-Object System.Windows.Forms.Form
$objForm.StartPosition = "CenterScreen"
$objForm.Size = New-Object System.Drawing.Size(1000,600)
$objForm.Text = "Windows Setup"
$objForm.BackColor = "white"
$objForm.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon($Bild)
$objForm.Opacity = 0.9
$objForm.Topmost = $true
$objForm.ShowInTaskbar=$false
$objForm.MaximizeBox = $false
$objForm.MinimizeBox = $false
$objForm.ControlBox = $true
$objForm.ShowIcon = $true
$objForm.Visible = $false
$objForm.WindowState = "Normal"
$objForm.SizeGripStyle = "Show"
# Linien
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(0,0)
$objLabel.Size = New-Object System.Drawing.Size(1000,20)
$objLabel.BackColor = "lightblue"
$objForm.Controls.Add($objLabel)
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(0,540)
$objLabel.Size = New-Object System.Drawing.Size(1000,20)
$objLabel.BackColor = "lightblue"
$objForm.Controls.Add($objLabel)
# Bilder
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(25,40)
$objLabel.Size = New-Object System.Drawing.Size(256,256)
$objLabel.BackColor = "white"
$objLabel.Image = [System.Drawing.Image]::FromFile($Bild[1])
$objForm.Controls.Add($objLabel)
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(700,260)
$objLabel.Size = New-Object System.Drawing.Size(256,256)
$objLabel.BackColor = "white"
$objLabel.Image = [System.Drawing.Image]::FromFile($Bild[2])
$objForm.Controls.Add($objLabel)
# Textfeld
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(340,40)
$objLabel.Size = New-Object System.Drawing.Size(500,30)
$objLabel.Font = "Arial Unicode MS, 14"
$objLabel.ForeColor = "black"
$objLabel.Text = "Programme werden installiert..."
$objLabel.Name = "Programme werden installiert..."
$objForm.Controls.Add($objLabel)
# Programme starten...
$i=0
Do{
if (-not $Name[$i]) { Exit }
else
{
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size($Text_X[$i],$Text_Y[$i])
$objLabel.Size = New-Object System.Drawing.Size(240,20)
$objLabel.BackColor = "white"
$objLabel.Font = "Arial Unicode MS, 10"
$objLabel.ForeColor = "black"
$objLabel.Text = $Name[$i]
$objForm.Controls.Add($objLabel)
$objForm.ShowDialog() | Out-Null
if ($objLabel.Text = $Name[$i])
{
$Name[$i] = Start-Job $Process[$i] |Get-Job
if (Get-Job -state Running)
{
$objImage_Run = New-Object System.Windows.Forms.Label
$objImage_Run.Location = New-Object System.Drawing.Size($Image_X[$i],$Image_Y[$i])
$objImage_Run.Size = New-Object System.Drawing.Size(16,16)
$objImage_Run.Image = [System.Drawing.Image]::FromFile($Bild[3])
$objForm.Controls.Add($objImage_Run)
$objLabel.Font = New-Object System.Drawing.Font($objLabel.Font,[System.Drawing.FontStyle]::Bold)
$objForm.Controls.Add($objLabel)
}
$objForm.ShowDialog() | Out-Null
Wait-Job -Job $Name[$i]
Receive-Job -Job $Name[$i]
if (Get-Job -state Completed)
{
$objImage_Ok = New-Object System.Windows.Forms.Label
$objImage_Ok.Location = New-Object System.Drawing.Size($Image_X[$i],$Image_Y[$i])
$objImage_Ok.Size = New-Object System.Drawing.Size(16,16)
$objImage_Ok.Image = [System.Drawing.Image]::FromFile($Bild[4])
$objForm.Controls.Remove($objImage_Run)
$objForm.Controls.Add($objImage_Ok)
$objLabel.Font = New-Object System.Drawing.Font($objLabel.Font,[System.Drawing.FontStyle]::Regular)
$objForm.Controls.Add($objLabel)
}
else
{
$objImage_nOk = New-Object System.Windows.Forms.Label
$objImage_nOk.Location = New-Object System.Drawing.Size($Image_X[$i],$Image_Y[$i])
$objImage_nOk.Size = New-Object System.Drawing.Size(16,16)
$objImage_nOk.Image = [System.Drawing.Image]::FromFile($Bild[5])
$objForm.Controls.Remove($objImage_Run)
$objForm.Controls.Add($objImage_nOk)
$objLabel.Font = New-Object System.Drawing.Font($objLabel.Font,[System.Drawing.FontStyle]::Regular)
$objForm.Controls.Add($objLabel)
}}}
$objForm.ShowDialog() | Out-Null
Remove-Job -Job $Name[$i]
$i++
}
while ($i -lt $Name.Length) &$Process.Length; &$Text_X.Length; &$Text_Y.Length; &$Image_X.Length; &$Image_Y.Length
Exit
Ich habe mein Script auch mal mit einer Hash-Tabelle ausprobiert.
Leider kann bei der Hash-Tabelle mittels Wait-Job, Receive-Job und Remove-Job der Job nicht abgefragt werden.
[array]$Prg =@()
$Prg+=($Programm=""| Select Name,Process,Text_X,Text_Y,Image_X,Image_Y); $Programm.Name="Visual C++ 2010 x64 Redistributable"; $Programm.Process={Start-Process "C:\Software\Microsoft\Visual C++ 2010 x64 Redistributable\VisualC++Redistributable.vbs" -Wait };$Programm.Text_X=345;$Programm.Text_Y=80;$Programm.Image_X=585;$Programm.Image_Y=82;$Programm
$Prg+=($Programm=""| Select Name,Process,Text_X,Text_Y,Image_X,Image_Y); $Programm.Name="Visual C++ 2015 x64 Redistributable"; $Programm.Process={Start-Process "C:\Software\Microsoft\Visual C++ 2015 x64 Redistributable\VisualC++Redistributable.vbs" -Wait };$Programm.Text_X=345;$Programm.Text_Y=100;$Programm.Image_X=585;$Programm.Image_Y=102;$Programm
Hierzu finde ich leider auch bei Google nichts um dies zu verstehen.
Gibt es für Neulinge eine Erklärung zu diesem Thema?
Vielen Dank im Voraus für Eure Unterstützung.
Schöne Grüße
Markus2016
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 313204
Url: https://administrator.de/contentid/313204
Ausgedruckt am: 27.11.2024 um 13:11 Uhr
4 Kommentare
Neuester Kommentar
Subscribe the completed event of a job (Register-ObjectEvent) and close your form from it.
https://learn-powershell.net/2013/02/08/powershell-and-events-object-eve ...
Regards
https://learn-powershell.net/2013/02/08/powershell-and-events-object-eve ...
Regards
Simple Example
function GenerateForm {
#region Import the Assemblies
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null
#endregion
$global:form1 = New-Object System.Windows.Forms.Form
$pb = New-Object System.Windows.Forms.ProgressBar
$btnStart = New-Object System.Windows.Forms.Button
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
$timer = New-Object System.Windows.Forms.Timer
$timer.Interval = 500
$global:job = $null
#----------------------------------------------
#Generated Event Script Blocks
#----------------------------------------------
$timer.add_Tick({
if ($global:job.JobStateInfo.State -eq "Completed"){
$form1.Close()
$timer.Stop()
}
})
$handler_btnStart_Click=
{
$pb.Visible = $true
$timer.Start()
$global:job = Start-Job -ScriptBlock {
# simply wait 3 seconds
sleep 3
}
}
$OnLoadForm_StateCorrection=
{#Correct the initial state of the form to prevent the .Net maximized form issue
$global:form1.WindowState = $InitialFormWindowState
}
#----------------------------------------------
#region Generated Form Code
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 98
$System_Drawing_Size.Width = 367
$global:form1.ClientSize = $System_Drawing_Size
$global:form1.DataBindings.DefaultDataSourceUpdateMode = 0
$global:form1.MaximizeBox = $False
$global:form1.MinimizeBox = $False
$global:form1.Name = "form1"
$global:form1.Text = "Test close from job"
$pb.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 54
$pb.Location = $System_Drawing_Point
$pb.Name = "pb"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 300
$pb.Size = $System_Drawing_Size
$pb.TabIndex = 1
$pb.Style = 2
$pb.Visible = $false
$global:form1.Controls.Add($pb)
$btnStart.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 12
$btnStart.Location = $System_Drawing_Point
$btnStart.Name = "btnStart"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 75
$btnStart.Size = $System_Drawing_Size
$btnStart.TabIndex = 0
$btnStart.Text = "Start job"
$btnStart.UseVisualStyleBackColor = $True
$btnStart.add_Click($handler_btnStart_Click)
$global:form1.Controls.Add($btnStart)
#endregion Generated Form Code
#Save the initial state of the form
$InitialFormWindowState = $global:form1.WindowState
#Init the OnLoad event to correct the initial state of the form
$global:form1.add_Load($OnLoadForm_StateCorrection)
#Show the Form
$global:form1.ShowDialog()| Out-Null
$timer.Stop()
$timer.Dispose()
} #End Function
GenerateForm