# CMD-Befehl per JavaScript in Formular Textarea schreiben (ActiveX?)



## lukelukeluke (16. Februar 2007)

Hallo zusammen,
Ich bin am Entwickeln eines PHP Skripts. Dabei möchte ich gerne gewisse Daten vom lokalen PC per Windows CMD (Batch-Datei o.ä.) in eine Formular-Textarea schreiben. Dieses soll der Benutzer dann absenden können.
Bis jetzt haben wir das so gemacht: 1) Mitarbeiter lädt Batch-Datei herunter, 2) Wird ausgeführt, Output in ein Textfile, 3) Output kopieren und in Formularfeld einfügen 4) senden. Dies soll also vereinfacht werden.
Natürlich spielt es keine Rolle wenn ein Sicherheitshinweis kommt. Soll sowieso auch nur im Internet Explorer funktionieren.
Meine Frage ist, wie man sowas angeht. Ich verstehe wenig von JavaScript, programmiere hauptsächlich PHP. Kann JavaScript sowas umsetzen? Ich bin sicher das es via ActiveX-Komponente geht, da kann man ja fast alles vom IE aus machen...
Hat jemand eine Ahnung?
Gruz,
Luke


----------



## Sven Mintel (16. Februar 2007)

Was genau liefert denn die Batch-Datei als Output....womöglich ist der Umweg über die Batch garnicht notwendig...ein bisserl kann JScript bzw. der WSH ja auch alleine


----------



## lukelukeluke (16. Februar 2007)

Die Batch-Datei soll ein DIR-Befehl der Festplatte liefern. Also sozusagen alle Files die auf dem PC installiert sind. Diese werden dann in die Index-Datenbank geschrieben, wo man sieht, auf welchen PCs welche Software installiert ist.
Bis jetzt habe ich es so gemacht, dass die Batch-Datei mittel Link angeklick werden kann (ausführen) und der Index wird auf der Festplatte gespeichert. Danach kann man unten per Formularfeld die Datei wählen und das Formular absenden. Leider kann man in einem File Formularfeld (<input type='file'>) per Javascript keinen Wert setzen (Sicherheitsmassnahme, weil sonst diese in öffentlichen Formularen versteckt eingebaut werden könnten).


----------



## Sven Mintel (17. Februar 2007)

Hier mal ne Beispiel:

```
<html>
<head>
<title>Test</title>
</head>
<body>
<script type="text/javascript">
<!--

shell = new ActiveXObject('WScript.Shell');
fso   = new ActiveXObject('Scripting.FileSystemObject');



function mache_liste(drive)
{
  shell.run("%comspec% /c dir "+drive+":\ /s /b > files_"+drive+".txt");
}

function sende_liste(drive)
{
  file  = fso.OpenTextFile("files_"+drive+".txt",1);
  str   = file.ReadAll();
  file.Close();
  file  = fso.GetFile("files_"+drive+".txt");
  file.Delete();
  document.forms[0].files.value = str;
  document.forms[0].submit();
}



//-->
</script>
<center>
<?php
  if(isset($_POST['files']))
    {
      ?>
      <pre style="text-align:left;height:300px;overflow:scroll;">
        <?php
          echo htmlentities($_POST['files']);
        ?>
      </pre>
      <?php
    }
?>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
  <input type="button" onclick="mache_liste('c')" value="mache_liste('c')">
  <input type="button" onclick="sende_liste('c')" value="sende_liste('c')">
  <input type="hidden" name="files">
</form>
</center>
</body>
</html>
```
Leider kann man nicht alles mit einem Klick abhandeln, da nicht bekannt ist, wann die Liste fertiggeschrieben wurde...aber irgendwas ist ja immer


----------



## lukelukeluke (19. Februar 2007)

Hallo Sven,
Danke für den Beispielcode! Geht der bei dir gleich so wie er da ist?
Ich krieg da immer die Fehlermeldung: *Automatisierungsserver kann Objekt nicht erstellen*.
Ich hab das auf IE 6 und auf IE 7 probiert, auf 2 verschiedenen sauber aufgesetzten PCs mit allen Hotfixes. Nach ein bischen Nachforschungen habe ich im Internet gelesen, dass man WSH (Windows Scripting Host) installieren muss, damit diese Fehlermeldung nicht kommt. Bei meinem Skript ist das natürlich unmöglich, dass man dies bei jedem PC installieren muss, bei welchem das Skript funktionieren muss. Dann könnte ich gleich ne kleine Anwendung schreiben die das erledigt. Meinste das geht auch irgendwie "direkt"?
Danke jedenfalls für deine Hilfe!
PS: Ich hätte auch ne Idee wie es mit nur einem Button gehen würde: Man könnte ja nach dem Befehl "DIR" immer die grösse des Fiels messen, das erstellt wird, und danach 2 Sekunden warten. Sobald sich die Filegrösse nicht mehr verändert, startet der Form-Upload. Also von der technischen Seite müsste ich das natürlcih auch erst ertüfteln aber das wäre n Ansatz.
-Lukas


----------



## Quaese (19. Februar 2007)

Hi,

die Meldung, dass der Automatisierungsserver das Objekt nicht erstellen kann, ist sicherlich ein Folge der Sicherheitseinstellungen
im IE. Dort müssen ActiveX-Steuerelemente, die nicht sicher sind, aktiviert werden - oder zumindest auf Nachfrage zugelassen werden.

Ciao
Quaese


----------



## Sven Mintel (19. Februar 2007)

Ich dachte dies wäre ohnehin klar :


> Natürlich spielt es keine Rolle wenn ein Sicherheitshinweis kommt. Soll sowieso auch nur im Internet Explorer funktionieren.


Das einfachste wäre, wenn die Benutzer diese Seite als "vertrauenswürdig" einstufen würden.

Am fehlenden WSH liegt es nicht, der ist seit WIN98 an Board.


----------

