我的目标:
编写一个快速的gui程序,它允许您从日期选择器中选择日期,将该日期作为命令行参数发送到powershell脚本,并显示该脚本的输出。我希望输出是实时的,而不是重定向到随后显示的文件。
另外,我一直在使用winforms在powershell中编写gui部分,但我可以切换到C#或其他东西。
我尝试过搜索,但在winForm中运行PS脚本时找不到多少。
谢谢! -Brodie
我道歉,我想这个问题有点宽泛。我会尝试更详细地描述我想要的东西 -
我想要一个包含日期选择器和其他选项的Windows窗体(我可以自己做的东西)。然后,当按下RUN按钮时,底部的区域(下面的红色概述)将显示完全独立的Powershell脚本的OUTPUT。
如果我能更好地澄清,请告诉我。
答案 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脚本的步骤:
using (PowerShell ps = Powershell.Create()) { //your code here }
AddScript()
和AddParameter()
方法添加脚本和参数。Invoke()
(同步)或BeginInvoke()
(异步)方法执行脚本。此博客文章包含完整教程:https://blogs.msdn.microsoft.com/kebab/2014/04/28/executing-powershell-scripts-from-c/