HTA从文本文件</span>写入<span>

时间:2012-04-02 22:27:34

标签: powershell hta

我正在尝试将数据从文本文件写入HTA中。

我正在HTA内部运行一个powershell脚本,使用VBscript作为输入按钮

Get-TSSession -computername ismeta | where { $_.username -eq 'amis5235'} | format-table windowstationname,username,state,sessionid | out-file C:\windows\temp\PSTerminalServices.txt

我将为每个循环使用一个约60个服务器

然后我希望将输出写入HTA内部,有点像VB中的流光或者堆叠VBscript的字符串,如:

strHTML = strHTML & "Running Process = " & objProcess.Name & " PID = " & objProcess.ProcessID & " Description = " & objProcess.Description & "<br>"

但似乎应该有一种更简单的方法来做到这一点。

2 个答案:

答案 0 :(得分:1)

我认为这个最小的HTA将解决您的问题。它运行命令行并读取输出流,每1/10秒读一行,然后将结果推送到textarea。您可能希望更改Powershell脚本以将流程详细信息返回给STDOUT,但它可能会起作用。

<script language="Javascript">
var E, LineWriteTimerID
function execWithStatus(cmdLine){//Can't run minimized with Exec. Can't capture StdOut/StdErr with Run. 
    E = new ActiveXObject("WScript.Shell").Exec(cmdLine);
    LineWriteTimerID = window.setInterval("writeOutLine()",100);//pause for 100ms
    E.StdIn.Close();//must close input to complete a ps command    
}
function writeOutLine(){
    if(E.StdOut.AtEndOfStream) window.clearTimeout(LineWriteTimerID);
    if(!E.StdErr.AtEndOfStream) txtResults.value += "ERROR: " + E.StdErr.ReadAll() + "\n";
    if(!E.StdOut.AtEndOfStream) txtResults.value += E.StdOut.ReadLine() + "\n";
}
</script>
<textarea id=txtCmd style="width:90%" rows=1>
powershell.exe -noninteractive -command ls c:\windows\system32\drivers\etc\</textarea> 
<button onclick="execWithStatus(txtCmd.value)">Run</button>
<br><textarea id=txtResults style="width:100%" rows=20></textarea> 

将此代码保存为.HTA文件,将txtCmd textarea的内容更改为您的命令行,并尝试一下。祝你好运!

答案 1 :(得分:0)

Ok这是我使用的方式。

从理论的角度来看,它包括使用Windows窗体构建一个接口,然后将PowerSell代码放在事件后面。

从技术角度看两个解决方案:

1)使用visual studio免费版在C#中构建界面,然后使用转换工具创建关联PowerShell源(french article here

2)你可以自由下载(你只需要注册)Sapiens PrimalFormsCE.exe(社区版)

PrimalFormsCE download

此工具允许您创建表单,然后生成Powershell关联代码。

PrimalFormsCE image

你也可以从崩溃中构建表格,这是一个和平的示例代码:

Add-Type -AssemblyName system.Windows.Forms

# Create the form
$form = New-Object Windows.Forms.Form
$form.Text = "Test Saisie"
$form.Size = New-Object System.Drawing.Size(250,154)

# Create EntryFiel
$TB_Saisie = New-Object System.Windows.Forms.TextBox
$TB_Saisie.Location = New-Object System.Drawing.Point(50,31)
$TB_Saisie.Size = New-Object System.Drawing.Size(150,32)

# Create "Ok" Button
$PB_Ok = New-Object System.Windows.Forms.Button
$PB_Ok.Text = "Ok"
$PB_Ok.Location = New-Object System.Drawing.Point(50,62)
$PB_Ok.Size = New-Object System.Drawing.Size(50,32)
$PB_Ok.DialogResult = [System.Windows.Forms.DialogResult]::OK

# Create "Cancel" Button
$PB_Cancel = New-Object System.Windows.Forms.Button
$PB_Cancel.Text = "Cancel"
$PB_Cancel.Location = New-Object System.Drawing.Point(150,62)
$PB_Cancel.Size = New-Object System.Drawing.Size(50,32)
$PB_Cancel.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
# Add controls to the form
$form.Controls.Add($PB_Ok)
$form.Controls.Add($PB_Cancel)
$form.Controls.Add($TB_Saisie)

# Message loop
$Res = $form.ShowDialog()
If ($Res -eq [System.Windows.Forms.DialogResult]::OK)
{
  Write-Host ("Accepted : {0}" -f $TB_Saisie.Text)
}
else
{
  Write-Host "Cancel"
}