Winforms Windows窗体中显示的powershell脚本的输出?
我的目标是: 编写一个快速gui程序,用于从日期选择器中选择日期,将该日期作为命令行参数发送到powershell脚本,并显示该脚本的输出。我希望输出是实时的,而不是重定向到一个文件,然后显示 此外,我也一直在使用winforms在powershell中编写gui部分,但我可以切换到C或其他方式 我尝试过搜索,但在winForm中运行PS脚本时找不到太多内容 谢谢! -布罗迪 编辑1 很抱歉,我想问题有点宽泛。我将尝试更详细地描述我想要什么- 我想有一个windows窗体,其中包含日期选择器和其他我可以自己做的选项。然后,当按下RUN按钮时,底部红色区域将显示完全独立的Powershell脚本的输出Winforms Windows窗体中显示的powershell脚本的输出?,winforms,powershell,scripting,Winforms,Powershell,Scripting,我的目标是: 编写一个快速gui程序,用于从日期选择器中选择日期,将该日期作为命令行参数发送到powershell脚本,并显示该脚本的输出。我希望输出是实时的,而不是重定向到一个文件,然后显示 此外,我也一直在使用winforms在powershell中编写gui部分,但我可以切换到C或其他方式 我尝试过搜索,但在winForm中运行PS脚本时找不到太多内容 谢谢! -布罗迪 编辑1 很抱歉,我想问题有点宽泛。我将尝试更详细地描述我想要什么- 我想有一个windows窗体,其中包含日期选择器和其
请让我知道我是否可以更好地澄清。一个使用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()
从Winforms应用程序运行Powershell脚本的步骤简要概述如下: 使用System.Management.Automation程序集。 启动PowerShell类,类似于:使用PowerShell ps=PowerShell.Create{//your code here} 使用AddScript和AddParameter方法添加脚本和参数。 使用Invoke synchronous或BeginInvoke asynchronous方法执行脚本。
这篇博文包含一个完整的教程:你的问题太广泛了。请参阅问题指南。@stuartd:OP不一定要使用C.Rudedog9d,您应该尝试并发布一些代码,以便我们提供帮助。我想我可能需要的一个很好的例子是安装—安装程序如何向您展示他们实时执行的每个进程。这是如何工作的?我看过这段代码或非常类似的代码,尽管我很欣赏它!请参阅我的编辑,以了解有关我要查找的内容的更多详细信息。您可能是对的,只需在线获取一些代码并粘贴在一起,就可以给您一个快速的答案:一个更合适的答案。。