Return von C-Sharp ConsoleApp direkt in VBS ausgeben
Hallo @ All
Ich weiß! VBS! Alter Hut! Trotzdem scheint es auf meine Frage irgendwie keine auffindbare Antwort zu geben.
Mein Problem ist folgendes und ich hoffe auf eure Unterstützung
:
Ich habe eine kleine C-Sharp ConsoleApp geschrieben die einige OS- und hardwarespezifische Details ausgiebt.
z.B (Geräte Model ausgeben):
Da wir noch verstärkt mit VBS arbeiten soll das Ganze natürlich auch via VB funktionieren. Tut es natürlich auch, aber nur über diesen Umweg:
Ich würde das Output der exe aber gerne direkt bekommen ala Functions-Aufruf. Z.B. so:
Ich gehe davon aus, dass ich in der C-Sharp-App etwas ändern muss. Nur was? Environment.Exit(myResult) funktioniert natürlich nicht, weil hier nur numerische Werte gültig sind).
hier noch ein Code-Snipped aus der C-Sharp-App:
Vielen Dank für eure Hilfe!
Mayho
Ich weiß! VBS! Alter Hut! Trotzdem scheint es auf meine Frage irgendwie keine auffindbare Antwort zu geben.
Mein Problem ist folgendes und ich hoffe auf eure Unterstützung
Ich habe eine kleine C-Sharp ConsoleApp geschrieben die einige OS- und hardwarespezifische Details ausgiebt.
z.B (Geräte Model ausgeben):
Da wir noch verstärkt mit VBS arbeiten soll das Ganze natürlich auch via VB funktionieren. Tut es natürlich auch, aber nur über diesen Umweg:
Dim objShell : Set objShell = CreateObject("Wscript.Shell")
Set exec = objShell.Exec("<Path>\SysInfo.exe -model")
Dim Result : Result = exec.StdOut.ReadLine
Ich würde das Output der exe aber gerne direkt bekommen ala Functions-Aufruf. Z.B. so:
Dim Result : Result = "<Path>\SysInfo.exe -model"
Ich gehe davon aus, dass ich in der C-Sharp-App etwas ändern muss. Nur was? Environment.Exit(myResult) funktioniert natürlich nicht, weil hier nur numerische Werte gültig sind).
hier noch ein Code-Snipped aus der C-Sharp-App:
//Main:
static void Main(string args)
{
foreach (var arg in args)
{
if (Regex.Match(arg, @"(-Mod|-mo|\/mod|\/mo)").Success)
new Worker().GetSysInfo();
}
}
//exemplarisch die Methode zum auslesen:
public string GetSysInfo()
{
string toReturn = string.Empty;
System.Management.SelectQuery query = new System.Management.SelectQuery(@"Select * from Win32_ComputerSystem");
using (System.Management.ManagementObjectSearcher searcher = new System.Management.ManagementObjectSearcher(query))
{
foreach (System.Management.ManagementObject process in searcher.Get())
{
process.Get();
try
{
toReturn = (process["Model"]).ToString().TrimStart().TrimEnd(); ;
}
catch (Exception e)
{
toReturn = "can't read WMI. see: " + e.Message;
}
}
}
Console.WriteLine(toReturn);
return toReturn;
}
Vielen Dank für eure Hilfe!
Mayho
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 372052
Url: https://administrator.de/forum/return-von-c-sharp-consoleapp-direkt-in-vbs-ausgeben-372052.html
Ausgedruckt am: 02.04.2025 um 04:04 Uhr
3 Kommentare
Neuester Kommentar

Da wir noch verstärkt mit VBS arbeiten soll das Ganze natürlich auch via VB funktionieren. Tut es natürlich auch, aber nur über diesen Umweg:
Das ist der normale Weg den du gehen musst um Stdout deiner Konsolenanwendung zu capturen. Deinen gewünschter Weg gibt und gab es noch nie in VBS, nimm stattdessen die Powershell , die kann das by design Du könntest dir höchstens ein COM-Object programmieren von dem du dann mit CreateObject eine Instanz erstellst und dann deine Methoden in der DLL direkt ansprichst, damit ist dann die Rückgabe an die Variable direkt möglich.
Da VBS keine DLLs direkt ansprechen kann sehe ich das als einzigste Möglichkeit, und den Scripthost um Funktionen zu erweitern kommt wohl sicher nicht in Frage

Joa VBS war halt immer schon eine Krücke, VBA hat es besser gemacht und man konnte die Win32 API ansprechen.
? Nimm immer den -NoProfile Switch und lad alles was gebraucht wird in den AssemblyCache .. dann ist das ganze noch etwas schneller
.
Powershell hat den unangenehmen Nebeneffekt, dass es erst das Framework laden muss um arbeiten zu können.
Eine Sekunde ist dir zu viel