2013-01-31 3 views
0

좋은 하루가 모두Powershell 타이머가 일시 중지하지 않고

평상시와 같이 나는 시스템 비트 록커 목록의 상태를 보여주기 위해 고안된 간단한 스크립트가 있습니다. 시스템 이름의 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

는, 아마도 나는 분명하지 않다.

어쨌든 솔루션은 쓰기 쉽고 쓰기 가능한 $ object, receive-job이었습니다. 완료

관련 문제