Konvertieren eines Tools von PowerShell nach etwas, was man kompilieren kann VB, C, ..
Also, ich habe ein VirtualServer, auf dem Programme laufen und der immer hart an der RAM-Obergrenze schrammt. Ich habe nun ein kl. PowerShell Script geschrieben, dass das Laufen der Programme überwacht und, falls abgestürzt, sie wieder startet. Allein, die PowerShell frißt knapp 100MB meines Rams und deren Scripte kann man nicht kompilieren - also möchte ich das Script in 'was anderes übertragen und kompilieren und ich denke vielleicht gibt es hier neben Interesse auch Hilfe. Zu Zeit ist der Prg-Filename "terminal.exe" und die Pfade noch 'hard-coded', später soll das als Attribute übergeben werden.
So, mein Script läuft, es gibt sogar auf der Konsole eine Statusmeldung aus. Erschwerend bei meinem Problem ist der Umstand, dass dreimal dasselbe Programm gestartet wird, nur aus unterschiedlichen Foldern, es muss also der Pfad überprüft werden.
Als final denke ich mir: checkRun.exe "Filname.exe", "pfad1", "pfad 2", .... Zur Zeit ist es halt noch fest eingeschrieben.
Und es geht mir um die die Programm in VBasic, oder C, oder ... und dann kompiliert.
Hat jemand Interesse das mitzumachen? Ich denke es mir als frei für alle...
So, mein Script läuft, es gibt sogar auf der Konsole eine Statusmeldung aus. Erschwerend bei meinem Problem ist der Umstand, dass dreimal dasselbe Programm gestartet wird, nur aus unterschiedlichen Foldern, es muss also der Pfad überprüft werden.
Als final denke ich mir: checkRun.exe "Filname.exe", "pfad1", "pfad 2", .... Zur Zeit ist es halt noch fest eingeschrieben.
Und es geht mir um die die Programm in VBasic, oder C, oder ... und dann kompiliert.
Hat jemand Interesse das mitzumachen? Ich denke es mir als frei für alle...
$pN = "terminal" ## later: $args
$orgPaths = @("C:\Program Files (x86)\FIBO Group Holdings Limited", "C:\Program Files (x86)\GFT MT4 Powered by BT", "C:\Program Files (x86)\MT4")
$noPATH = $orgPaths.length
$debug = $false ## later -debug -Option
while (1) {
$nRunning = 0
$checkPaths = $orgPaths.Clone()
$ProgressHeadLine = "checking MT4 Traders at "+(Get-Date)
$ProgressStatus = ""
if ( $allProcesses = get-process -name $pN -errorAction SilentlyContinue ) {
foreach ($oneProcess in $allProcesses) {
$idx = -1
$prg = $oneProcess.path
$aPR = $prg.split("\ ")
$txtDebug = " check:`t"+$prg+"`n"
$filled = " found:`t"
$failed = "FAILED:`t"
for($k=0; $k -lt $noPATH; $k++) {
$pth = $orgPaths[$k]
$txtDebug += "Idx["+$k+"]:`t"+$pth+"`n"
if ($pth -match "^ok") { continue }
$aPcs = $pth.Split("\ ") ## split into Pieces
$nPcs = $aPcs.count
$tmp = "";
for( $n=0; $n -lt $nPcs; $n++ ) {
$p = $aPcs[$n]
if ( $aPR[$n] -match $p ) {
$filled = $filled+" "+$p
if ( $n -eq 4 ) {
$tmp += " "+$p
}
if ( $n -eq 5 ) {
$tmp += "-"+$p
}
} else {
$failed = $failed+"#"+$p
break
}
if ( $n -eq ($nPcs - 1) ) {
$ProgressStatus += $tmp+":ok"
$txtDebug += $filled+"`n"+$failed+"`n"+"ret:`t"+$k+"`n"
$idx = $k
}
}
}
if ( $idx -lt 0 ) {
$txtDebug += "NOT fnd:`t"+$oneProcess.path+"`n"
$ProgressStatus += " NOT FOUND "
} else {
$txtDebug += "fnd["+$idx+"]:`t"+$checkPaths[$idx]+"`n"
$checkPaths[$idx] = "ok"
$nRunning++
}
write-progress -activity $ProgressHeadLine -status $ProgressStatus
## start-sleep 1
}
} else {
## nothing is running start them all
foreach ($p in $orgPaths) {
$start = $p+"\"+$pN+".exe"
$txtDebug += " checkd "+(Get-Date)+" going to start "+$start+"`n"
## $mt4 = [System.Diagnostics.Process]::Start( $start )
}
continue
}
if ( $nRunning -eq $noPATH ) {
$txtDebug += "check`t"+(Get-Date)+" all "+$nRunning+" MT4 (of "+$noPATH+") are running`n"
} else {
$txtDebug += "check`t"+(Get-Date)+" just "+$nRunning+" MT4 (of "+$noPATH+") are running`n"
for($i=0; $i -lt $noPATH; $i++) {
if ( $checkPaths[$i] -match "^ok" ) {
if ( $debug -eq $true ) { echo("ok:`t"+(Get-Date)+" running "+$orgPaths[$i]) }
} else {
$start = $checkPaths[$i]+"\"+$pN+".exe"
$txtDebug += "##:`t"+(Get-Date)+" to start "+$start+"`n"
$mt4 = [System.Diagnostics.Process]::Start( $start )
}
}
}
if ( $debug -eq $true ) { $txtDebug }
start-sleep 10
}
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 167082
Url: https://administrator.de/forum/konvertieren-eines-tools-von-powershell-nach-etwas-was-man-kompilieren-kann-vb-c-167082.html
Ausgedruckt am: 21.04.2025 um 18:04 Uhr
5 Kommentare
Neuester Kommentar
Hallo an dich "Also, ich habe ein...",
Gruß,
Peter
Zitat von @goooly:
Also, ich habe ein VirtualServer, auf dem Programme laufen und der immer hart an der RAM-Obergrenze schrammt. Ich habe nun ein kl. PowerShell Script geschrieben, dass das Laufen der Programme überwacht und, falls abgestürzt, sie wieder startet.
Warum nicht einfach mehr RAM in deine Kiste stecken? Und stürzen diese Programm wirklich wegen zu wenig RAM ab?Also, ich habe ein VirtualServer, auf dem Programme laufen und der immer hart an der RAM-Obergrenze schrammt. Ich habe nun ein kl. PowerShell Script geschrieben, dass das Laufen der Programme überwacht und, falls abgestürzt, sie wieder startet.
Gruß,
Peter
Hallo goooly,
die 100MB erschrecken mich auch bei Powershell. Habe damit noch nicht gearbeitet, aber diesen Aspekt
hätte ich nicht erwartet. Skripte sind meistens die schnellsten.
Naja, man kann das sicher auch mit Batch, VBS oder VB machen ( hier mal ein Beispiel in VB , wie man die aktuellen Fenster/Programme ermittelt im Taskmanager.). VBS und VB lassen sich kompilieren und Batch - so meine ich - auch.
Bei deiner Fragestellung würde ich fast zu Batch tendieren. Diese sollte am schnellsten und resourcensparenden sein.
Aber bitte belehrt mich da eines besseren. Ob man die dann noch in eine exe wandeln muss - ok, deine Entscheidung
Soweit erst mal,
Gruss
Tsuki
[Edit]
und hier im Vergleich zu VB das ganze als Einzeiler in Batch:
[/Edit]
die 100MB erschrecken mich auch bei Powershell. Habe damit noch nicht gearbeitet, aber diesen Aspekt
hätte ich nicht erwartet. Skripte sind meistens die schnellsten.
Naja, man kann das sicher auch mit Batch, VBS oder VB machen ( hier mal ein Beispiel in VB , wie man die aktuellen Fenster/Programme ermittelt im Taskmanager.). VBS und VB lassen sich kompilieren und Batch - so meine ich - auch.
Bei deiner Fragestellung würde ich fast zu Batch tendieren. Diese sollte am schnellsten und resourcensparenden sein.
Aber bitte belehrt mich da eines besseren. Ob man die dann noch in eine exe wandeln muss - ok, deine Entscheidung
Soweit erst mal,
Gruss
Tsuki
[Edit]
und hier im Vergleich zu VB das ganze als Einzeiler in Batch:
tasklist >task.txt
[/Edit]
ich nochmal:
also, wenn ich mit zum Beispiel
starte, werden gerade mal 1,5MB im Speicher verbraten (WinXP Pro SP3)
Das ist erst einmal ein 70stel von der Powershell!
Batch kann man nach exe mit zum Beispiel Bat_To_Exe_Converter.exe konvertieren. Auch das habe ich mal getestet und würde funktionieren.
also ich tendiere nach wie vor zu Batch, wenn es schnell sein soll und resourcensparend.
In einer Schleife laufen lassen mit ein bisschen Prozesse abfragen-ping-goto-etc. da sollte dein Vorhaben umsetzbar sein.
Viele Grüße
Tsuki
also, wenn ich mit zum Beispiel
call "D:\Eigene Programme\MeinProgramm.exe"
Das ist erst einmal ein 70stel von der Powershell!
Batch kann man nach exe mit zum Beispiel Bat_To_Exe_Converter.exe konvertieren. Auch das habe ich mal getestet und würde funktionieren.
also ich tendiere nach wie vor zu Batch, wenn es schnell sein soll und resourcensparend.
In einer Schleife laufen lassen mit ein bisschen Prozesse abfragen-ping-goto-etc. da sollte dein Vorhaben umsetzbar sein.
Viele Grüße
Tsuki