如何从powershell GUI中的列表创建可单击链接

时间:2014-12-05 23:37:04

标签: powershell user-interface

我正在为朋友编写一个powershell工具,以帮助他更轻松地管理一些服务器检查。 我有一个文件夹,我将存储每日日志文件。 我想要一个选项,其中工具列出所有文件,您可以单击它并自动打开。

这是我的代码,它读取文件夹:

function reportlist
{
    $reportfiles = $PSScriptRoot + "\reports\"
    $reportlist = Get-ChildItem -path $reportfiles
    foreach ($report in $reportlist)
    {
        $outputBox.text += "" + $report + "`n" 
    } 
}

所以基本上我使用Get0Chiditem读取文件并将整个内容逐行填充到文本框中。 这就是它在GUI窗口中的样子(我无法发布图像)

report_1_date_xx_xx_xxxx.html
report_2_date_xx_xx_xxxx.html
report_3_date_xx_xx_xxxx.html
report_4_date_xx_xx_xxxx.html
report_5_date_xx_xx_xxxx.html

这些是我想转换为HTML中的链接的文件。 是否可以从GUI实现它?有时,当我在文本框中列出不同的窗口属性时,结果显示为链接,但我不知道它是如何编写的。 任何帮助如何做到这一点都会很棒。

以下是我创建输出框的方法。这是一个丰富的文本框

$outputBox = New-Object System.Windows.Forms.richTextBox 
$outputBox.Location = New-Object System.Drawing.Size(400,40) 
$outputBox.Size = New-Object System.Drawing.Size(600,500) 
$outputBox.MultiLine = $True 
$outputBox.ScrollBars = "Vertical" 
$outputBox.font = "Courier new"
$Form.Controls.Add($outputBox) 

对于UI的创建,每个对象都以类似的方式定义。我没有使用XAML方法(我认为这是创建powershell GUI的另一种方式)

这是主要形式的定义:

$form = New-Object Windows.Forms.Form
$form.Size = New-Object System.Drawing.Size(1050,600)
$form.ShowDialog()

2 个答案:

答案 0 :(得分:0)

看看Out-GridView cmdlet。我知道它不是超链接,但我认为它会创建你想要的结果。

$data = 1..10

$data | ForEach-Object{Set-Content -Value $_  -Path "$_.txt"}

Get-ChildItem *.txt | Out-GridView -PassThru | %{& $_}

答案 1 :(得分:0)

好的......仍未找到任何解决方案。但我创造了一个解决方案:

我创建了一个下拉菜单:

$DropDownBox2 = New-Object System.Windows.Forms.ComboBox
$DropDownBox2.Location = New-Object System.Drawing.Size(10,350) 
$DropDownBox2.Size = New-Object System.Drawing.Size(180,20) 
$DropDownBox2.DropDownHeight = 200 
$Form.Controls.Add($DropDownBox2) 
$reportfiles = $PSScriptRoot + "\reports\"
$reportlist = Get-ChildItem -path $reportfiles
foreach ($report in $reportlist)
    {
       $DropDownBox2.Items.Add($report)
    }    

然后我在它旁边创建了一个“打开文件”按钮,然后点击按钮我创建了一个小函数,它打开了调用项目所选文件:

function openreport
 {
  $openfile = $PSScriptRoot + "\reports\" + $DropDownBox2.SelectedItem.ToString() 
  invoke-item $openfile
}

如果有人知道如何从我感兴趣的richtextbox元素中创建这样的东西。