PowerShell中實現人機交互

編寫腳本的過程當中有不少時候須要進行人機交互,好比我寫一個腳本,須要動態的輸入一些內容,好比用戶名和密碼之類的東西,這些是沒辦法事先寫進代碼裏的。而經過外部文件進行信息讀取,友好性又差了點。因此當咱們須要動態的用戶輸入信息時,一個這樣的表單真是必不可少。雖然這並非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窗體對象,並動態的賦予窗體標題和按鈕名稱。)對象

相關文章
相關標籤/搜索