編寫腳本的過程當中有不少時候須要進行人機交互,好比我寫一個腳本,須要動態的輸入一些內容,好比用戶名和密碼之類的東西,這些是沒辦法事先寫進代碼裏的。而經過外部文件進行信息讀取,友好性又差了點。因此當咱們須要動態的用戶輸入信息時,一個這樣的表單真是必不可少。雖然這並非PowerShell做爲一個腳本語言的強項,可是任何具備特點的語言確定都不是完美的,因此咱們爲了充分發揮腳本語言的靈活性,有時候也不得不爲他的弱項買單。(其實也沒有太弱,若是VS中WinForm用的熟,這個原理也是同樣的,PowerShell作爲一種腳本語言,和C#同樣是基於.NET框架的,因此類庫相通,不少特性均可以互聯。)框架
如下是個人代碼,實現一個動態交互表單:ide
<# Intro: This function will display a form to communicate with the user. Input: -FormText -ButtonText Example: MakeForm -FormText "ForInput" -ButtonText "Submit" Use: To make the PowerShell program's interactivity better. #> function MakeForm{ param($FormText,$ButtonText) $null = [Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") $form = New-Object Windows.Forms.Form $form.size = New-Object Drawing.Size -Arg 400,80 $form.StartPosition = "CenterScreen" $form.Text = $FormText.toString() $textBox = New-Object Windows.Forms.TextBox $textBox.Dock = "fill" $form.Controls.Add($textBox) $button = New-Object Windows.Forms.Button $button.Text = $ButtonText $button.Dock = "Bottom" $button.add_Click( {$global:resultText = $textBox.Text;$form.Close()}) $form.Controls.Add($button) [Void]$form.ShowDialog() }
使用方法以下:spa
MakeForm -FormText "What's your name" -ButtonText "Submit" 3d
運行效果以下:orm
PS:用戶輸入的內容將存儲到變量$global:resultText中。(本質就是建立了一個WinForm窗體對象,並動態的賦予窗體標題和按鈕名稱。)對象