Laden...

Nach Invoke auf virt. Maschine mit "echo" in eine Datei schreiben

Erstellt von Glowhollow vor 5 Jahren Letzter Beitrag vor 5 Jahren 796 Views
G
Glowhollow Themenstarter:in
74 Beiträge seit 2018
vor 5 Jahren
Nach Invoke auf virt. Maschine mit "echo" in eine Datei schreiben

Hallo,

ich sitze hier vor einem komischen Phänomen und verstehe es noch nicht ganz.

Ich invoke einen Process auf einer virtuellen Maschine. Das funktioniert soweit auch ganz gut (siehe Codebeispiel unten), verwende ich jedoch echo um in eine Datei zu schreiben, macht er das nicht.

Ich verstehe nur nicht warum ? Ist der Pfad falsch ? Ist es irgendeine Sicherheitsrichtlinie die ich übersehe ? Sonst irgendwas anderes ?

object[] theProcessToRun2 = { "CMD.EXE /C " + '"' + "echo.exe test 123 4 5 6 7" + '"' + " " + "> " + '"' + @"C:\temp10\Pythontest.py" + '"' };
using (var managementClass = new ManagementClass(serviceScope, new ManagementPath("Win32_Process"), new ObjectGetOptions()))
{
managementClass.InvokeMethod("Create", theProcessToRun2);
}

der serviceScope ist korrekt, mit Credentials etc... Ein ähnlicher Aufruf, nur diesmal ohne echo, funktioniert einwandfrei und der Computer schreibt auch Dateien.

Jedoch scheint er mit dem Echo sich zu weigern.

Was hab ich übersehen ?

P.S. Führe ich exact, den selben Code auf der CMD-Zeile auf der remote maschine aus, schreibt er die datei.

16.835 Beiträge seit 2008
vor 5 Jahren

Prinzipiell ist ein Batch Script im Gegensatz zu PowerShell dafür auch nicht ausgelegt.

Auch das Problem ist relativ einfach:
Das Batch will hier mit echo auf den stdout schreiben, was eine UI Element darstellt.
Da Du in einem Remote Context bist würde damit auf der Remote Maschine der Output dargestellt werden; aber hier existiet aufgrund des Remote Context natürlich überhaupt keine UI-Referenz, zB. auf ein Desktop und knallt.

Und natürlich funktioniert das ganze auf eine CMD, da hier natürlich auch ein UI Context existiert.

G
Glowhollow Themenstarter:in
74 Beiträge seit 2018
vor 5 Jahren

Hallo Abt,

danke für deine weisen Worte. Das ist eine Erklärung mit der ich was anfangen kann...

Ich hätte hier ein paar Fragen dazu.

a) gibt es eine Möglichkeit, den stdout umzulenken, so das ich die argumente nach echo in die datei bekomme ?

b) gibt es eine Limitierung was die Länge des echo-Aufrufs anbetrifft ?

Grüße

und vielen Dank

16.835 Beiträge seit 2008
vor 5 Jahren

PowerShell ist die Lösung dafür, denn bei der Konzeption von PowerShell wurden solche Dinge - wie Remote Execution - bereits in der Engine bedacht.
Echo ist nur eine der vielen Fallstricke bei Batch Dateien und Remote Execution.

G
Glowhollow Themenstarter:in
74 Beiträge seit 2018
vor 5 Jahren

Ok, danke dir Abt.

In meinem speziellen fall darf ich keine powershell benutzen, habe aber jetzt festgestellt, das ich die dateien direkt mit File.WriteAllText mit hilfe des UNC Pfades schreiben kann, damit kann ich mir den umweg über die konsole sparen.

Anders siehts aus, wenn kein share vorhanden ist. Dann muß ich mir noch ne lösung einfallen lassen.

Solange das aber funktioniert, ist gut.