2016-08-29 6 views
2

私がやっている間違いを理解することができません。次のスクリプトはバッチファイルの束を呼び出し、バッチファイルがジョブを実行している間に進行状況をスクリプトの名前とともに進行状況バーを表示します。私が達成したいのは、インストールプロセス中にカスタムメッセージを表示することです。私は間違いを見つけることができません、どんな助けも深く感謝します。powershellを使用してインストール中にカスタムメッセージを表示する

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

Set-Location $PSScriptRoot 

#Call scripts for installation 
$ScriptsHome = Get-Item '.\test\forPS\*' 

#Define Form 
# Init Form 
$Form = New-Object System.Windows.Forms.Form 
$Form.width = 1000 
$Form.height = 200 
$Form.Text = "** Installation in Progress-PLEASE DO NOT CLOSE THIS WINDOW**" 
$Form.Font = New-Object System.Drawing.Font("Times New Roman" ,12, [System.Drawing.FontStyle]::Regular) 
$Form.MinimizeBox = $False 
$Form.MaximizeBox = $False 
$Form.WindowState = "Normal" 
$Form.StartPosition = "CenterScreen" 
$Form.Opacity = .8 
$Form.BackColor = "Gray" 

#Define ICON for Form 
$Icon = New-Object System.Drawing.Graphics (".\ICON.jpg") 
$Form.Icon = $Icon 

# Init ProgressBar 
$ProgressBar = New-Object System.Windows.Forms.ProgressBar 
$ProgressBar.Maximum = $ScriptsHome.Count 
$ProgressBar.Minimum = 0 
$ProgressBar.Location = new-object System.Drawing.Size(10,70) 
$ProgressBar.size = new-object System.Drawing.Size(967,10) 
$Form.Controls.Add($ProgressBar) 
$Form.Controls.Add($Messages) 

#Running Script Name 
$Label = New-Object System.Windows.Forms.Label 
$Label.AutoSize = $true 
$Label.Location = New-Object System.Drawing.Point(10,50) 
$Form.Controls.Add($Label) 

#Define Array messages 
#Array 
$Messages = @("Preparing to install patch set..Preparing to stop all related processes", 
       "Upgrading the application", 
       "Copying the missing folder", 
       "Applying the patch", 
       "Starting all previously stopped Services", 
       "Checkcing healthyness of the system after the installation this is may take up to half an hour...", 
       "Rebooting Server" 
       ) 
$Messages = New-Object System.Windows.Forms.Label 
$Messages.AutoSize = $true 
$Messages.Location = New-Object System.Drawing.Point(10,50) 
$Form.Controls.Add($Messages) 


# Add_Shown action  
$ShownFormAction = { 
    $Form.Activate() 

    foreach ($script in $ScriptsHome) { 
     $ProgressBar.Increment(1) 
     #$Messages.Text = $Messages[$Messages] 
     $Label.Text  = "$($script.Name)" 
     Start-Process $script.FullName -Wait -WindowStyle Hidden 
    } 
    $Form.Dispose() 
} 
$Form.Add_Shown($ShownFormAction) 

# Show Form 
$Form.ShowDialog() 

ありがとうございます。

答えて

3

あなたがメッセージのリストとメッセージ自体を示すラベルに同じ変数名を再利用している:

$Messages = @("Preparing to install patch set..Preparing to stop all related processes", 
       "Upgrading the application", 
       "Copying the missing folder", 
       "Applying the patch", 
       "Starting all previously stopped Services", 
       "Checkcing healthyness of the system after the installation this is may take up to half an hour...", 
       "Rebooting Server" 
       ) 
$Messages = New-Object System.Windows.Forms.Label 
$Messages.AutoSize = $true 
$Messages.Location = New-Object System.Drawing.Point(10,50) 

(すなわちラベルに$MessageLabelを使用しています。)そのうちの一つの名前を変更します。

$MessageLabel = New-Object System.Windows.Forms.Label 
$MessageLabel.AutoSize = $true 
$MessageLabel.Location = New-Object System.Drawing.Point(10,50) 

あなたは1で、すべてのステップをProgressBarをインクリメントするので、あなたは$Messages配列のインデックスにプログレスバーの値を再利用することができます

foreach ($script in $ScriptsHome) { 
    $ProgressBar.Increment(1) 
    $MessageLabel.Text = $Messages[$ProgressBar.Value - 1] 
    $Label.Text  = "$($script.Name)" 
    Start-Process $script.FullName -Wait -WindowStyle Hidden 
} 
関連する問題