0

良い一日を

いつものように、私は立ち往生しています。システムのビットロッカーのリストのステータスを表示するように設計された単純なスクリプトがあります。システム名の 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 に答える