/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?