0

美好的一天

像往常一样,我被困住了,我有一个简单的脚本,旨在向您显示系统 bitlocker 列表的状态。给它一个系统名称的 txt,剩下的就交给它了。所有作品按预期进行;但是,它会在滴答作响的计时器上更新列表,执行时会使窗口无响应并且似乎已损坏(对于那些不了解它在做什么的用户)。有没有办法以某种方式将其分支以避免这种挂断?

我考虑过做一个分支,但我现在知道如何让该分支更新其父级中的一个对象......如果那是可能的话。

代码:

[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()
4

1 回答 1

0

我不敢相信没有人回答这个问题,也许我不清楚。

无论哪种方式,解决方案都很简单,写入输出 $object,然后接收作业。完毕

于 2013-02-25T19:10:35.030 回答