Windows窗体中显示的powershell脚本的输出?

时间:2016-05-16 12:28:22

标签: winforms powershell scripting

我的目标:

编写一个快速的gui程序,它允许您从日期选择器中选择日期,将该日期作为命令行参数发送到powershell脚本,并显示该脚本的输出。我希望输出是实时的,而不是重定向到随后显示的文件。

另外,我一直在使用winforms在powershell中编写gui部分,但我可以切换到C#或其他东西。

我尝试过搜索,但在winForm中运行PS脚本时找不到多少。

谢谢! -Brodie

编辑1

我道歉,我想这个问题有点宽泛。我会尝试更详细地描述我想要的东西 -

我想要一个包含日期选择器和其他选项的Windows窗体(我可以自己做的东西)。然后,当按下RUN按钮时,底部的区域(下面的红色概述)将显示完全独立的Powershell脚本的OUTPUT。

example win form

如果我能更好地澄清,请告诉我。

2 个答案:

答案 0 :(得分:2)

使用winforms的一个非常简单的powershell(据我所知你更喜欢):

这只需要一个日期,运行命令(echo)并获取输出。我想你可以休息一下......

(编辑答案以更好地适应编辑过的问题)

[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 

$objForm = New-Object Windows.Forms.Form 

$objForm.Text = "Select a Date" 
$objForm.Size = New-Object Drawing.Size @(500,400) 
$objForm.StartPosition = "CenterScreen"

$objForm.KeyPreview = $True

$objForm.Add_KeyDown({
    if ($_.KeyCode -eq "Escape") 
        {
            $objForm.Close()
        }
    })

function btnClick
{
            $dtmDate=$objCalendar.SelectionStart.ToString("yyyyMMdd")

            Write-Host "Date selected: $dtmDate"


        $ps = new-object System.Diagnostics.Process
        $ps.StartInfo.Filename = "cmd.exe"
        $ps.StartInfo.Arguments = " /c echo Date = $dtmDate"
        $ps.StartInfo.RedirectStandardOutput = $True
        $ps.StartInfo.UseShellExecute = $false
        $ps.start()
        $ps.WaitForExit()
        [string] $Out = $ps.StandardOutput.ReadToEnd();

        Write-Host "Output $Out"
        $label.text = "$Out"    
}

$button = New-Object Windows.Forms.Button
$button.text = "RUN"
$button.Location = New-Object Drawing.Point 170,130
$button.add_click({btnClick})
$objForm.controls.add($button)

$label = new-object system.windows.forms.label
$label.text = ""
$label.Location = New-Object Drawing.Point 0, 180
$label.Size = New-Object Drawing.Point 200,30
$objForm.controls.add($label)

$objCalendar = New-Object System.Windows.Forms.MonthCalendar 
$objCalendar.ShowTodayCircle = $False
$objCalendar.MaxSelectionCount = 1
$objForm.Controls.Add($objCalendar) 

$objForm.Topmost = $True

$objForm.Add_Shown({$objForm.Activate()})  
[void] $objForm.ShowDialog() 

答案 1 :(得分:0)

简要总结了从Winforms应用程序运行Powershell脚本的步骤:

  1. 使用System.Management.Automation程序集。
  2. 启动PowerShell类,例如:using (PowerShell ps = Powershell.Create()) { //your code here }
  3. 使用AddScript()AddParameter()方法添加脚本和参数。
  4. 使用Invoke()(同步)或BeginInvoke()(异步)方法执行脚本。
  5. 此博客文章包含完整教程:https://blogs.msdn.microsoft.com/kebab/2014/04/28/executing-powershell-scripts-from-c/