2013-01-31 18 views
0

好日子所有Powershell的定時器不停頓形式

像往常一樣,我堅持,我有一個旨在向您展示系統的BitLocker的列表的狀態一個簡單的腳本。給它一個系統名稱的txt,其餘部分完成。所有工作都按預期進行然而,它更新列表上的滴答定時器,執行時將使窗口無響應,並似乎被打破(對不知道它在做什麼的用戶)。有沒有辦法以某種方式分解這個以避免這種掛斷?

我認爲做了一個分支,但我現在知道如何使該分支更新其父對象...如果這甚至可能。

CODE:

[void] [Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms') 
$d = New-Object Windows.Forms.OpenFileDialog 
$d.ShowHelp = $true 
$d.filter = "System ID List (*.txt)| *.txt" 
$result = $d.ShowDialog() 
$names = @() 
$names = Get-Content $d.filename 

[System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") 

$myWindow = new-object System.Windows.Forms.form 
$myDataGrid = new-object System.windows.forms.DataGridView 
$myDataGrid.Location = new-object System.Drawing.Size(20,30) 
$myDataGrid.size = new-object System.Drawing.Size(450,480) 
$myDataGrid.AllowUserToAddRows = $False 
$myDataGrid.AutoSizeColumnsMode = [System.Windows.Forms.DataGridViewAutoSizeColumnsMode]::Fill 
$myDataGrid.RowsDefaultCellStyle.BackColor = [System.Drawing.Color]::Bisque 
$myDataGrid.AlternatingRowsDefaultCellStyle.BackColor = [System.Drawing.Color]::Beige 
$myDataGrid.BorderStyle = [System.Windows.Forms.BorderStyle]::Fixed3D 
$myDataGrid.ColumnHeadersDefaultCellSTyle.ForeColor = [System.Drawing.Color]::Maroon 
$myDataGrid.ColumnHeadersDefaultCellStyle.BackColor = [System.Drawing.Color]::Tan 
$myDataGrid.RowHeadersDefaultCellStyle.BackColor = [System.Drawing.Color]::Tan 
$myDataGrid.ColumnHeadersHeightSizeMode = [System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode]::AutoSize 
$myWindow.Controls.Add($myDataGrid) 


# Define menus 
$myMenuStrip = new-object System.Windows.Forms.MenuStrip 
$FileExit = new-object System.Windows.Forms.ToolStripMenuItem("&Exit") 
$FileExit.add_Click({ $myWindow.close() }) 
$myMenuStrip.Items.Add($FileMenu) 
$myWindow.Controls.Add($myMenuStrip) 

$timer = New-Object System.Windows.Forms.Timer 
$timer.Interval = 1000 
$timer.add_tick({ 
    $dataTable = New-Object System.Data.DataTable    
    $dataTable.Columns.Add("System") | Out-Null 
    $dataTable.Columns.Add("BitLocker % (C:)") | Out-Null   
    foreach ($name in $names) { 
     $stat = (manage-bde.exe -cn $name -status C:)[11].split(":")[1] 
     $row = $dataTable.NewRow() 
     $row["System"] = $name 
     $row["BitLocker % (C:)"] = $stat 
     $dataTable.Rows.Add($row) 
    } 
    $myDataGrid.DataSource = $dataTable 
}) 

# main program body 
$myWindow.Text = "BitLocker Status" 
$myWindow.size = new-object System.Drawing.Size(500,600) 
$myWindow.autoscroll = $true 
$myWindow.Add_Shown({$myWindow.Activate()}) 
$timer.Start() 
$myWindow.ShowDialog() 

回答

0

我不能相信沒有人回答了這個,也許是我沒說清楚。

無論哪種解決方案都很簡單,寫輸出$對象,然後接收作業。 完成