【问题标题】:Output from a powershell script displayed in Windows Form? [closed]Windows 窗体中显示的 powershell 脚本的输出? [关闭]
【发布时间】:2016-09-12 05:52:23
【问题描述】:

我的目标:

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

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

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

谢谢! -布罗迪


编辑 1

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

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

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

【问题讨论】:

  • 您发布的问题过于宽泛。请参阅问题指南。
  • @stuartd :OP 不一定要使用 C#。 Rudedog9d,您应该尝试并发布一些代码,以便我们提供帮助。
  • 我想我可能想要的一个很好的例子是安装 - 安装程序如何实时向您显示他们正在执行的每个过程。它是如何工作的?

标签: winforms powershell scripting


【解决方案1】:

一个非常简单的使用 winforms 的 powershell(据我了解,您更喜欢):

这只是需要一个日期,运行一个命令(回显)并获取输出。我认为你可以解决剩下的问题..

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

[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() 

【讨论】:

  • 我看过这段代码(或非常相似的),虽然我很感激!请参阅我的编辑以获取有关我正在寻找的内容的更多详细信息
  • 嗨。您可能是对的,只需在线获取一些代码并粘贴在一起即可为您提供快速答案:) 一个更合适的答案正在路上..
【解决方案2】:

从 Winforms 应用程序运行 Powershell 脚本的步骤简要概括如下:

  1. 使用 System.Management.Automation 程序集。
  2. 启动 PowerShell 类,例如:using (PowerShell ps = Powershell.Create()) { //your code here }
  3. 使用AddScript()AddParameter() 方法添加脚本和参数。
  4. 使用Invoke()(同步)或BeginInvoke()(异步)方法执行脚本。

此博文包含完整教程:https://blogs.msdn.microsoft.com/kebab/2014/04/28/executing-powershell-scripts-from-c/

【讨论】:

    猜你喜欢
    • 2019-03-31
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多