我正在處理的腳本的一部分採用指定的用戶名,爲類似用戶名的計算機搜索活動目錄,對它們進行ping操作,然後將聯機計算機添加到數組中稍後再使用。我想添加一個進度條到腳本的ping部分,但我遇到了問題。如果我在ping循環之前調用它,我必須提供進度條的表格凍結腳本的執行。Powershell GUI,進度條和哈希表
下面是進度條(非常基本的)代碼:
#Progress Bar
$objFormPBar = New-Object System.Windows.Forms.Form
$objFormPBar.Text = "Loading"
$objFormPBar.Size = New-Object System.Drawing.Size(200,100)
$objFormPBar.StartPosition = "CenterScreen"
$objFormPBar.Topmost = $True
$objFormPBar.Icon = $Icon
$progressBar = New-Object System.Windows.Forms.ProgressBar
$progressBar.Size = New-Object System.Drawing.Size(175,20)
$progressBar.Location = New-Object System.Drawing.Size(5, 20)
$progressBar.Minimum = 0
$progressBar.Maximum = 0
$objFormPBar.Controls.Add($progressBar)
這裏就是我試圖顯示它,這樣一來停止腳本的執行(從點擊事件處理函數中調用,因此,全局變量):
$global:progressBar.Maximum = $computers.count
$global:objFormPBar.Add_Shown({$objFormPBar.Activate()})
[void] $global:objFormPBar.ShowDialog()
Foreach ($computer in $computers) {
$computer = $computer.trim()
If(Test-Connection $computer -Count 1) {
$arrayComputers.add($computer) | Out-Null
}
$global:progressBar.Increment(1)
}
$global:objFormPBar.Close()
展望我發現,您可以運行在一個單獨的線程中的進度條和傳遞變量的問題,這兩個(見:Marquee Progress Bar freezes in Powershell)。然而,我沒有運氣讓它工作,甚至沒有讓另一個線程啓動。我怎樣才能得到這個進度條和表單以及它在另一個線程中運行?
哇,很簡單,謝謝。看起來我的櫃檯沒有正確遞增,但我想我可以解決這個問題。我不寫給控制檯的原因只是爲了讓事情看起來更好。整個過程將通過GUI完成,而不是控制檯。 – user3645184
如果您不使用counter/ndx遞增的'for'循環,那麼請謹慎使用'$ counter ++',因爲它不會「輸出」結果。爲了獲得增量和輸出,使用'($ counter ++)'。 –