将stream cmd输出放到文本框中

时间:2018-01-10 03:55:59

标签: powershell cmd

我想通过powershell cmd直接向Text_Site执行连续ping操作。 我有Text_Site和一个文本框,您可以在其中放置网站PING作为按钮,Text_Status表示应该在哪里显示结果。继承我的代码:

[xml]$xaml = @'
<Window 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="TPM Script" Height="482" Width="479" Background="White">
    <Grid Height="375" Width="382">
        <Button Content="PING" Height="55" HorizontalAlignment="Left" Margin="230,30,0,0" Name="PING" VerticalAlignment="Top" Width="140"/>
        <Label Content="Enter site name: " Height="23" HorizontalAlignment="Left" Margin="31,45,0,0" Name="Label1" VerticalAlignment="Top" Width="133"/>
        <TextBox Height="38" HorizontalAlignment="Left" Margin="31,74,0,0" Name="Text_Site" VerticalAlignment="Top" Width="171" />
        <TextBox Height="114" HorizontalAlignment="Left" Margin="31,241,0,0" Name="Text_Status" VerticalAlignment="Top" Width="329" />
    </Grid>
</Window>
'@

[void][System.Reflection.Assembly]::LoadWithPartialName('presentationframework')
$reader=(New-Object System.Xml.XmlNodeReader $xaml) 

try
{
        $Form=[Windows.Markup.XamlReader]::Load( $reader )
}
catch
{
    Write-Host "Unable to load Windows.Markup.XamlReader. Some possible causes for this problem include: .NET Framework is missing PowerShell must be launched with PowerShell -sta, invalid XAML code was encountered."t
}
## CHECK FORM
    $xaml.SelectNodes("//*[@Name]") | %{Set-Variable -Name "$($_.Name)" -Value $Form.FindName($_.Name)} # find all names and make them accessible via a variable

#First Button 
$PING = $Form.FindName('PING')
$PING.Add_Click({
    <#Test-Connection -computername $Text_Site.text
       $text_status.text = "pinging"#>
$ping = Test-Connection -ComputerName $Text_Site.text -Quiet -Count 4
While($true){
    If($ping  -eq $true){
        $Text_Site.text = $Text_Site.text+"`n Ping Successful!"
    }else{
        $Text_Site.text = $Text_Site.text+"`n Ping Failed!"
    }     
}  

})

$Form.ShowDialog() | out-null

1 个答案:

答案 0 :(得分:1)

刚刚测试过您的代码,当您尝试使用它时,它会突然挂起/崩溃。好吧,它在我的系统上完成,你的结果永远不会出现在你的第二个测试盒中。我将假设这是你的问题。经过多次尝试并强制关闭表单后,最终会显示结果,但仅限于站点框中。 因此,除了未显示结果外,您的代码中存在一些问题。

例如这......

If($ping  -eq $true){
    $Text_Site.text = $Text_Site.text+"`n Ping Successful!"
}else{
    $Text_Site.text = $Text_Site.text+"`n Ping Failed!"
}   

真的应该是......

 If($ping  -eq $true){
    $Text_Status.text = $Text_Site.text+"`n Ping Successful!"
}else{
    $Text_Status.text = $Text_Site.text+"`n Ping Failed!"
}  

这就是为什么结果会在站点框中结束,而不是结果框。然而,这种困难/需要紧密关闭,是一个你需要弄清楚的真正问题。

然而,为什么要经历编写表单的麻烦,除非它是一个学习/家庭作业或者你的任务是编写一个需要它的应用程序。 或者您可以通过GUI中的按钮进行呼叫。

$SiteName = 'stackoverflow.com','stackexchange.com'
$SiteName | ForEach-Object {Test-Connection $_} | Out-GridView -PassThru

当然,您可以将上述功能放在人们可以从GUI中使用的功能中。

但是,如果您需要有关如何做事的指导。有很多关于如何在整个网络上执行此操作的示例。虽然这些主要是使用WinForms而不是XAML。

以下是我保存的档案中的一些。我只是访问网站,以确保他们仍然可以下载,审查或调整您的需求。

PowerShell GUI工具 - 网络Pinger - 第2版

https://gallery.technet.microsoft.com/scriptcenter/PowerShell-GUI-Tool-f03b7523

这个带GUI的PowerShell脚本可以让你ping整个子网或只是一个范围。 输入&amp;运行它&#39;。\ Ping子网表格与gui.ps1&#39; 在“子网”框中输入前三个八位字节 然后输入开始和结束范围 调整任何变量以及是否仅显示pingable和主机名, 按Ping按钮。

https://community.spiceworks.com/scripts/show/1464-ping-subnet-form-with-gui-ps1

获取计算机ping状态,IP,操作系统版本,sp版本,正常运行时间和上次启动gui

这个带有内置GUI的powershell脚本允许您指向计算机的文本文件列表,然后将为列表中的每台计算机检索以下信息。是否可以ping通其IP地址操作系统版本Service Pack版本正常运行时间上次启动时间。通过en

运行它
https://gallery.technet.microsoft.com/scriptcenter/Display-computers-status-c8ff289d

在GUI应用程序中显示输出

https://www.sapien.com/blog/2014/12/15/display-output-in-a-gui-application-copy