Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Konvertieren eines Tools von PowerShell nach etwas, was man kompilieren kann VB, C, ..

Frage Entwicklung Basic

Mitglied: goooly

goooly (Level 1) - Jetzt verbinden

27.05.2011, aktualisiert 21:27 Uhr, 4885 Aufrufe, 5 Kommentare

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...
01.
 
02.
$pN      = "terminal" ## later: $args[0] 
03.
$orgPaths = @("C:\Program Files (x86)\FIBO Group Holdings Limited", "C:\Program Files (x86)\GFT MT4 Powered by BT", "C:\Program Files (x86)\MT4") 
04.
$noPATH  = $orgPaths.length 
05.
$debug   = $false ## later -debug -Option 
06.
 
07.
 
08.
while (1) { 
09.
	$nRunning = 0 
10.
	$checkPaths = $orgPaths.Clone() 
11.
	$ProgressHeadLine = "checking MT4 Traders at "+(Get-Date) 
12.
	$ProgressStatus = "" 
13.
	if ( $allProcesses = get-process -name $pN -errorAction SilentlyContinue ) { 
14.
 
15.
		foreach ($oneProcess in $allProcesses) { 
16.
			$idx = -1 
17.
			$prg = $oneProcess.path 
18.
			$aPR = $prg.split("\ ") 
19.
			$txtDebug = " check:`t"+$prg+"`n" 
20.
			$filled = " found:`t" 
21.
			$failed = "FAILED:`t" 
22.
			for($k=0; $k -lt $noPATH; $k++) { 
23.
				$pth   = $orgPaths[$k] 
24.
 
25.
				$txtDebug += "Idx["+$k+"]:`t"+$pth+"`n" 
26.
				if ($pth -match "^ok") { continue } 
27.
				$aPcs  = $pth.Split("\ ") ## split into Pieces 
28.
				$nPcs  = $aPcs.count			 
29.
				$tmp = ""; 
30.
				for( $n=0; $n -lt $nPcs; $n++ ) { 
31.
					$p = $aPcs[$n] 
32.
					if ( $aPR[$n] -match $p ) { 
33.
						$filled = $filled+" "+$p 
34.
						if ( $n -eq 4 ) { 
35.
							$tmp += "   "+$p 
36.
37.
						if ( $n -eq 5 ) { 
38.
							$tmp += "-"+$p 
39.
40.
					} else { 
41.
						$failed = $failed+"#"+$p 
42.
						break 
43.
44.
					if ( $n -eq ($nPcs - 1) ) { 
45.
						$ProgressStatus += $tmp+":ok" 
46.
						$txtDebug += $filled+"`n"+$failed+"`n"+"ret:`t"+$k+"`n" 
47.
						$idx  = $k 
48.
49.
50.
51.
 
52.
			if ( $idx -lt 0 ) { 
53.
				$txtDebug += "NOT fnd:`t"+$oneProcess.path+"`n" 
54.
				$ProgressStatus += " NOT FOUND  " 
55.
			} else { 
56.
				$txtDebug += "fnd["+$idx+"]:`t"+$checkPaths[$idx]+"`n" 
57.
				$checkPaths[$idx] = "ok" 
58.
				$nRunning++ 
59.
60.
			write-progress -activity $ProgressHeadLine -status $ProgressStatus 
61.
			## start-sleep 1 
62.
63.
	} else { 
64.
		## nothing is running start them all 
65.
		foreach ($p in $orgPaths) { 
66.
			$start = $p+"\"+$pN+".exe" 
67.
			$txtDebug += " checkd "+(Get-Date)+" going to start "+$start+"`n" 
68.
			## $mt4 = [System.Diagnostics.Process]::Start( $start ) 
69.
70.
		continue 
71.
72.
 
73.
	if ( $nRunning -eq $noPATH ) { 
74.
		$txtDebug += "check`t"+(Get-Date)+"  all "+$nRunning+" MT4 (of "+$noPATH+") are running`n" 
75.
	} else { 
76.
		$txtDebug += "check`t"+(Get-Date)+" just "+$nRunning+" MT4 (of "+$noPATH+") are running`n" 
77.
		for($i=0; $i -lt $noPATH; $i++) { 
78.
			if ( $checkPaths[$i] -match "^ok" ) { 
79.
				if ( $debug -eq $true ) { echo("ok:`t"+(Get-Date)+" running  "+$orgPaths[$i]) } 
80.
			} else { 
81.
				$start = $checkPaths[$i]+"\"+$pN+".exe" 
82.
				$txtDebug += "##:`t"+(Get-Date)+" to start "+$start+"`n" 
83.
				$mt4 = [System.Diagnostics.Process]::Start( $start ) 
84.
85.
86.
87.
 
88.
	if ( $debug -eq $true ) { $txtDebug } 
89.
	start-sleep 10 
90.
91.
 
Mitglied: Pjordorf
27.05.2011 um 23:15 Uhr
Hallo an dich "Also, ich habe ein...",

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?

Gruß,
Peter
Bitte warten ..
Mitglied: goooly
27.05.2011 um 23:34 Uhr
Warum monatlich mehr zahlen, wenn nicht nötig?
Ob sie abstürzen - weiß ich nicht, es soll aber nicht passieren, wen ich gerade nicht da bin - und meistens ist es so!
Calli
Bitte warten ..
Mitglied: TsukiSan
28.05.2011 um 15:20 Uhr
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:
01.
tasklist >task.txt
[/Edit]
Bitte warten ..
Mitglied: TsukiSan
28.05.2011 um 15:54 Uhr
ich nochmal:

also, wenn ich mit zum Beispiel
01.
call "D:\Eigene Programme\MeinProgramm.exe"
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
Bitte warten ..
Mitglied: goooly
29.05.2011 um 13:11 Uhr
Danke, batch in der alten Dos cmd scheint mir interessant, aber ich habe gleich einen Dämpfer bekommen:
Wie komme ich an den File-Name der laufenden Programme?
Zwar kriege ih alle laufenden terminal.exe:
tasklist /FI "IMAGENAME eq terminal.exe"
aber dann gibt's keinen Pfad dieser terminal.exe
Bin weiter am suchen, aber wenn jemand schnel eine Idee hat?
LG, gooly
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Windows Server
C sharp oder Powershell oder VB? (3)

Frage von 1410640014 zum Thema Windows Server ...

Batch & Shell
gelöst PowerShell Script Move-Item nach x Tagen (5)

Frage von lupolo zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell - In Textdatei suchen und ersetzen (5)

Frage von Raaja89 zum Thema Batch & Shell ...

Batch & Shell
gelöst PowerShell Domain Join (2)

Frage von Patrick-IT zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...