PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : VBS Arrays



BaShoR
20.06.2011, 07:35:35
Hi,

hat einer von euch eine Idee wie man nun genau in einem VBS-Skript mit Arrays handhabt? Weil irgendwie muss man ja die dann als Objekt ansprechen, im Internet steht aber nun nichts wirklich genauses (die Sachen die ich gefunden habe waren mir etwas zu vage).


Option Explicit
Dim objWMIService, objProcess, colProcess
Dim strComputer, strProcessKill
strComputer = "."
strProcessKill = "'calc.exe'"

Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")

Set colProcess = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = " & strProcessKill )
For Each objProcess in colProcess
objProcess.Terminate()
Next
WSCript.Echo "Just killed process " & strProcessKill _
& " on " & strComputer
WScript.Quit

Ich will strProcessKill als Array welcher dann unten abgearbeitet wird, also dass mehrere Prozesse gekillt werden können.

SirK
20.06.2011, 12:08:44
Bin leider in VBS nicht so bewandert ... bin in C# beheimatet... allerdings
siehts für mich so aus als müsstest du ja lediglich ein stringarray anlegen oder nicht?
in c# würd ich das ganze denn einfach mit ner forschleife abarbeiten...
wenn du die ganzen processnamen einmal an das array übergeben hast kannst die ja eigentlich mit strProcessKill durchlaufen lassen. aber wie gesagt: vbs ist garnit meins xD

novice
20.06.2011, 12:16:20
Wenn ich es richtig verstanden habe, geht es ihm ja grade um das Implementieren des String-Arrays... Das Füllen per for-Schleife ist wohl kein Problem.
Den Code oben versteh ich allerdings überhaupt nicht...deshalb bin ich mir jetzt nicht so sicher :D

BaShoR
20.06.2011, 12:29:50
Habs jetzt mal so versucht:

Option Explicit
Dim objWMIService, objProcess, colProcess
Dim strComputer, strProcessKill, strInput
Dim myArray(1)
myArray(0) = "'firefox.exe'"
myArray(1) = "'mspaint.exe'"

' Input Box to get name of machine to run the process
Do
strComputer = (InputBox(" ComputerName to Run Script",_
"Computer Name"))
If strComputer <> "" Then
strInput = True
End if
Loop until strInput = True

For Each strProcessKill in myArray

Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")

Set colProcess = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = " & strProcessKill )
For Each objProcess in colProcess
objProcess.Terminate()
Next
WSCript.Echo "Just killed process " & strProcessKill _
& " on " & strComputer
WScript.Quit
Next

Leider durchläuft er die foreach-Schleife nur einmal, keine Ahnung warum :X

SirK
20.06.2011, 15:20:52
Also, wie gesagt ich bin VB nicht wirklich fitt... aber mir drängt sich die frage auf warum du eine "foreach" schleife nutzt und keine normale for, wäre vllcht simpler ;)
in c# würde ich das so machen


for(i = 0, i < myArray.count, i++)
{
strProcessKill = myArray[i];
//und jetzt dein Code und so ;)
}

BaShoR
20.06.2011, 15:26:28
Weil For Each einen Array explizit abarbeitet? Nur mit For wäre das ja eine weitere Abfrage die man nicht braucht :)

SirK
20.06.2011, 17:03:13
naja ich hatte mit foreach auch immer probleme deswegen binsch bei for hängen geblieben :ugly:

wenns nicht hilft habsch nix gesagt xD

Gu4rdi4n
22.06.2011, 23:08:52
Ähm ist das nicht logisch dass er nur einmal durchgeht?

das ende der for each schleife muss doch gekennzeichnet sein

du machst wscript.quit vor dem next
setz es mal danach

BaShoR
23.06.2011, 10:11:35
Ach verdammt, danke Gu4rdi4n, das hatte ich übersehen :)

Danke :daumen:

Gu4rdi4n
23.06.2011, 20:08:22
Ja ich kenn das :D

man konzentriert sich nicht auf die einfachen dinge im quelltext ;)