Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Tasklist in CSV-Datei schreiben (https://www.delphipraxis.net/185960-tasklist-csv-datei-schreiben.html)

ickehausen 22. Jul 2015 11:04

Tasklist in CSV-Datei schreiben
 
Hallo zusammen,

ich habe mehrer Terminalserver laufen, die mit Loadbalancing die Anwender verteilen. Nun hängen sich ganz gerne die Web-Browser auf und ich muss die User wieder freischalten in dem ich den Prozess abschieße. Jetzt wollte ich die Tasks in eine CSV-Datei schreiben um sie erstmal zu durchsuchen.
Mit der DOS-Konsole funktioniert es super.

Code:
tasklist /s 192.168.178.10 /u domain\administrator /p password /fi "Username eq User1" fo/csv >> c:\tasklist.csv
Wenn ich es aus Delhpi versuche, wird zwar die Datei tasklist.csv erzeugt, sie bleibt aber leer

Delphi-Quellcode:
ShellExecute(0, nil, 'cmd.exe', 'tasklist /s 192.168.178.10 /u domain\administrator /p password /fi "Username eq User1" fo/csv >> c:\tasklist.csv', nil, SW_SHOWNORMAL);
Kann mir jemand einen Tipp geben?

Der schöne Günther 22. Jul 2015 11:27

AW: Tasklist in CSV-Datei schreiben
 
Kann es sein dass du einfach nur den "/C"-Parameter für die cmd.exe vergessen hast voranzustellen?

ickehausen 22. Jul 2015 11:56

AW: Tasklist in CSV-Datei schreiben
 
Ich weiß jetzt leider nicht, was Du mit dem /C-Parameter meinst. Es wird ja die Datei c:\tasklist.csv erzeugt. Also werden Teile des Befehls ja durchgeführt. Wenn ich den Befehl in der DOS-Konsole eingebe, dauert es eine Zeit, bis die Datei vollständig erzeugt ist. Wenn ich es mit Delphi versuche, erscheint nur Kurz das Konsolen-Fenster und schließt sich dann gleich wieder. Also tippe ich, dass die Daten nicht in die Datei geschrieben werden, weil das Konsolen-Fenster zu früh geschlossen wird.

Der schöne Günther 22. Jul 2015 12:16

AW: Tasklist in CSV-Datei schreiben
 
/C für "Hey, cmd.exe, führe das aus, was ich dir als Parameter gebe und beende dich dann"

Es fehlte wohl weiterhin noch /A für "Ausgabe an Standard-Pipe im ANSI-Format"

Folgendes Programm

Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils, WinApi.Windows, WinApi.ShellApi;

begin
  try
   if ShellExecute(
      0,
      nil,
      'cmd',
      '/A /c tasklist /s 192.168.178.10 /u domain\administrator /p password /fi "Username eq User1" /fo csv > x:\test.txt',
      nil,
      SW_SHOWNORMAL
   ) < 32 then RaiseLastOSError();

  except
   on E: Exception do
     Writeln(E.ClassName, ': ', E.Message);
  end;

  readln;
end.
erzeugt bei mir eine Datei "x:\test.txt" mit dem Inhalt
Code:
INFORMATION: Es werden keine Aufgaben mit den angegebenen Kriterien ausgeführt.
Führe ich das gleiche in der Konsole aus bekomme ich allerdings noch etwas mehr:

Code:
WARNUNG: Benutzeranmeldeinformationen können für lokale Verbindungen nicht verwe
ndet werden.
INFORMATION: Es werden keine Aufgaben mit den angegebenen Kriterien ausgeführt.
Wenn du den "stderr"-Ausgabepfad (Fehler und Warnungen) auch in der Datei haben willst musst du die eine Zeile noch so anpassen:

Code:
'/A /c tasklist /s 192.168.178.10 /u domain\administrator /p password /fi "Username eq User1" /fo csv 1> x:\log.txt 2>&1'


PS: Aber ich glaube das Programm erstmal auf die Festplatte schreiben lassen, dann warten bis es fertig ist um dann diese Datei wieder einzulesen, das geht sicherlich besser. Das ging doch irgendwie, dass man z.B. "tasklist" startet und seinen stdOut direkt im Delphi-Programm abgreift?

ickehausen 22. Jul 2015 13:03

AW: Tasklist in CSV-Datei schreiben
 
Vielen Dank, schöner Günther,:P:P

es funktioniert und ich versuche jetzt noch, dass zu verstehen. Das in der DOS-Konsole noch mehr angezeigt wird, ist für mich i.M. nicht wichtig. Die Daten, die ich benötige, erhalte ich.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz