HTA запись в <span>из текстового файла - PullRequest
1 голос
/ 03 апреля 2012

Я пытаюсь записать данные из текстового файла в HTA.

Я запускаю скрипт powershell внутри HTA, используя 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 ]

1 голос
/ 10 мая 2012

Я думаю, этот минимальный HTA решит вашу проблему. Он запускает командную строку и читает выходной поток, одну строку каждые 1/10 секунды, а затем помещает результаты в текстовое поле. Возможно, вы захотите изменить свой скрипт 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 на вашу командную строку и попробуйте. Удачи!

0 голосов
/ 04 апреля 2012

Хорошо. Вот как я использую.

С теоретической точки зрения это состоит в создании интерфейса с Windows Forms и последующем размещении кода PowerSell за событием.

С технической точки зрения два решения:

1) Используйте Visual Studio Free Edition для создания интерфейса в C #, а затем инструмент преобразования для создания связанного источника PowerShell ( французская статья здесь )

2) вы можете скачать бесплатно (вам просто нужно зарегистрироваться) Sapiens PrimalFormsCE.exe (Community Edition)

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"
}
...