PowerShell一次显示阵列项目



我有一个数组,想一次显示每个项目。每个项目也应在不同时间间隔显示。我想我应该使用启动 - s 5。这是我到目前为止的代码。

function GenerateForm {
$a=
"Downloading Files", 
"Setting up VPN Connection", 
"Getting computer information", 
"Install Complete", 
"Cluster Flux Technologies", 
"You are Free to close this application" 

#region Import the Assemblies
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") 
[reflection.assembly]::loadwithpartialname("System.Drawing") 
#endregion
#region Generated Form Objects
$form1 = New-Object System.Windows.Forms.Form
$richTextBox1 = New-Object System.Windows.Forms.RichTextBox
$pictureBox1 = New-Object System.Windows.Forms.PictureBox
$btn1 = New-Object System.Windows.Forms.Button
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
#endregion Generated Form Objects
#----------------------------------------------
#Generated Event Script Blocks
#----------------------------------------------
#Provide Custom Code for events specified in PrimalForms.
$btn1_OnClick= {
        $richTextBox1.Text = $a | Out-String
    }
    #----------------------------------------------
#region Generated Form Code
$form1.BackColor = [System.Drawing.Color]::FromArgb(255,212,208,200)
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 658
$System_Drawing_Size.Width = 1072
$form1.ClientSize = $System_Drawing_Size
$form1.DataBindings.DefaultDataSourceUpdateMode = 0
$form1.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon('C:Users502706436Desktoptight vnccluster.ico')
$form1.Name = "form1"
$form1.Text = "Cluster Flux Technologies: VNC Installer"
$richTextBox1.BackColor = [System.Drawing.Color]::FromArgb(255,255,255,255)
$richTextBox1.DataBindings.DefaultDataSourceUpdateMode = 0
$richTextBox1.Enabled = $False
$richTextBox1.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",12,0,3,0)
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 566
$System_Drawing_Point.Y = 570
$richTextBox1.Location = $System_Drawing_Point
$richTextBox1.Name = "richTextBox1"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 39
$System_Drawing_Size.Width = 348
$richTextBox1.Size = $System_Drawing_Size
$richTextBox1.TabIndex = 2
$richTextBox1.Text = ""
$form1.Controls.Add($richTextBox1)
$pictureBox1.BackgroundImage = [System.Drawing.Image]::FromFile('C:Users502706436Desktoptight vnccluster2 logo.png')
$pictureBox1.BackgroundImageLayout = 2
$pictureBox1.DataBindings.DefaultDataSourceUpdateMode = 0

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 41
$System_Drawing_Point.Y = 35
$pictureBox1.Location = $System_Drawing_Point
$pictureBox1.Name = "pictureBox1"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 454
$System_Drawing_Size.Width = 949
$pictureBox1.Size = $System_Drawing_Size
$pictureBox1.TabIndex = 1
$pictureBox1.TabStop = $False
$form1.Controls.Add($pictureBox1)

$btn1.DataBindings.DefaultDataSourceUpdateMode = 0
$btn1.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",12,0,3,0)
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 71
$System_Drawing_Point.Y = 570
$btn1.Location = $System_Drawing_Point
$btn1.Name = "btn1"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 39
$System_Drawing_Size.Width = 292
$btn1.Size = $System_Drawing_Size
$btn1.TabIndex = 0
$btn1.TabStop = $False
$btn1.Text = "Click to install connection"
$btn1.UseVisualStyleBackColor = $True
$btn1.add_Click($btn1_OnClick)
$form1.Controls.Add($btn1)
#endregion Generated Form Code
#Save the initial state of the form
$InitialFormWindowState = $form1.WindowState
#Show the Form
$form1.ShowDialog()
}   #End Function
#Call the Function
GenerateForm

如果有人知道或对如何实现这一目标有建议,我将不胜感激。谢谢

用于更新文本,您可以使用:

$btn1_OnClick= {
      $a | %{  $richTextBox1.Text = $_ | Out-String;Start-Sleep -s 5}
    }

但是上述简单方法将在上述块运行时冻结UI。

$btn1_OnClick= {
$Runspace = [runspacefactory]::CreateRunspace()
$PowerShell = [powershell]::Create()
$PowerShell.runspace = $Runspace
$Runspace.Open()
[void]$PowerShell.AddScript({
param($richTextBox1)
$a=
"Downloading Files", 
"Setting up VPN Connection", 
"Getting computer information", 
"Install Complete", 
"Cluster Flux Technologies", 
"You are Free to close this application" 
 $a | %{  $richTextBox1.Text = $_ | Out-String;Start-Sleep -s 5;}
}).addargument($richTextBox1)
$AsyncObject = $PowerShell.BeginInvoke()
    }

最新更新