Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winforms Windows窗体中显示的powershell脚本的输出?_Winforms_Powershell_Scripting - Fatal编程技术网

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

Winforms Windows窗体中显示的powershell脚本的输出?,winforms,powershell,scripting,Winforms,Powershell,Scripting,我的目标是: 编写一个快速gui程序,用于从日期选择器中选择日期,将该日期作为命令行参数发送到powershell脚本,并显示该脚本的输出。我希望输出是实时的,而不是重定向到一个文件,然后显示 此外,我也一直在使用winforms在powershell中编写gui部分,但我可以切换到C或其他方式 我尝试过搜索,但在winForm中运行PS脚本时找不到太多内容 谢谢! -布罗迪 编辑1 很抱歉,我想问题有点宽泛。我将尝试更详细地描述我想要什么- 我想有一个windows窗体,其中包含日期选择器和其

我的目标是:

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

此外,我也一直在使用winforms在powershell中编写gui部分,但我可以切换到C或其他方式

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

谢谢! -布罗迪

编辑1 很抱歉,我想问题有点宽泛。我将尝试更详细地描述我想要什么-

我想有一个windows窗体,其中包含日期选择器和其他我可以自己做的选项。然后,当按下RUN按钮时,底部红色区域将显示完全独立的Powershell脚本的输出


请让我知道我是否可以更好地澄清。

一个使用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,您应该尝试并发布一些代码,以便我们提供帮助。我想我可能需要的一个很好的例子是安装—安装程序如何向您展示他们实时执行的每个进程。这是如何工作的?我看过这段代码或非常类似的代码,尽管我很欣赏它!请参阅我的编辑,以了解有关我要查找的内容的更多详细信息。您可能是对的,只需在线获取一些代码并粘贴在一起,就可以给您一个快速的答案:一个更合适的答案。。