In VB Script enthaltene angeklickte Checkboxen zählen und als Schleifendurchlaufanzahl benutzen
Folgendes Problem:
Ich habe eine HTA Applikation mit VB Script Inhalten erstellt.
Ich benutze sie um Rechner im Netzwerk ,hier von meinem PC aus, herunterfahren zu können.
Dazu muss ich nur die Haken in den entsprechenden Checkboxen machen und die Sub Prozedur aufrufen.
Soweit ist auch all funktionsfähig nur habe ich das Problem,daß wenn ich mehrere Rechner auf einmal herunterfahren will, mein Programm alle geklickten Checkboxen einzeln übergibt und damit meine Listenausgabe nicht funktioniert.
Es müsste also die Anzahl der angeklickten Checkboxen gezählt werden und diese Summe als Anzahl der Schleifendurchläufe genommen werden.
Wie erreiche ich das und wie muss die Schleife dann aussehen ?
Die ersten 6 Zeilen der Sub könnten auch weggelassen werden.
IP Adressen + Benutzernamen Übergabe erfolgt über ein array
Code für die angeklickten Checkboxen welche an die Sub herunterfahren übergeben werden
Hier mal meine Sub Prozedur
Vielen Dank für die Hilfe
mfg
Claus
Ich habe eine HTA Applikation mit VB Script Inhalten erstellt.
Ich benutze sie um Rechner im Netzwerk ,hier von meinem PC aus, herunterfahren zu können.
Dazu muss ich nur die Haken in den entsprechenden Checkboxen machen und die Sub Prozedur aufrufen.
Soweit ist auch all funktionsfähig nur habe ich das Problem,daß wenn ich mehrere Rechner auf einmal herunterfahren will, mein Programm alle geklickten Checkboxen einzeln übergibt und damit meine Listenausgabe nicht funktioniert.
Es müsste also die Anzahl der angeklickten Checkboxen gezählt werden und diese Summe als Anzahl der Schleifendurchläufe genommen werden.
Wie erreiche ich das und wie muss die Schleife dann aussehen ?
Die ersten 6 Zeilen der Sub könnten auch weggelassen werden.
IP Adressen + Benutzernamen Übergabe erfolgt über ein array
Dim intZeile
Dim remuser(6,1)
remuser(0,0) = "Frau Müller"
remuser(1,0) = "Herr Maier"
remuser(2,0) = "Herr Kohler"
remuser(3,0) = "Frau Beck"
remuser(4,0) = "Frau Rose"
remuser(5,0) = "Frau Schmidt"
remuser(6,0) = "Herr Himst"
remuser(0,1) = "192.168.115.11"
remuser(1,1) = "192.168.115.12"
remuser(2,1) = "192.168.115.13"
remuser(3,1) = "192.168.115.14"
remuser(4,1) = "192.168.115.15"
remuser(5,1) = "192.168.115.16"
remuser(6,1) = "192.168.115.17"
Code für die angeklickten Checkboxen welche an die Sub herunterfahren übergeben werden
If Checkbox1.Checked Then
' Frau Müller
remuser(0,0) = "Frau Müller"
remuser(0,1) = "192.168.115.11"
intzeile = 0
herunterfahren
End If
Hier mal meine Sub Prozedur
sub herunterfahren
user = "administrator"
password = "xxxxxx"
Set obj = GetObject("winmgmts:Win32_PingStatus.address='" & remuser(intZeile,1) & "'")
If IsNull(obj.StatusCode) Or obj.StatusCode <> 0 Then
fehlerliste = fehlerliste & "PC des Benutzers: " & remuser(intZeile,0) & " läuft nicht" & vbcrlf & vbcrlf
else
on error resume next
set wmi = CreateObject("WBemScripting.SWbemLocator")
Set cs = wmi.ConnectServer(remuser(intZeile,1),"root/cimv2",user,password)
set col = cs.InstancesOf("Win32_OperatingSystem")
for each obj in col
rc = obj.Shutdown
next
If (rc = 0) Then
MsgBox "Rechner: " & remuser(intZeile,0) & " wird heruntergefahren. Returncode = " & rc ,64,"Hinweis"
okliste = okliste & "PC des Benutzers: " & remuser(intZeile,0) & " wurde heruntergefahren" & vbcrlf & vbcrlf
end if
end if
msgbox okliste ,,"Heruntergefahrene PC´s"
msgbox fehlerliste ,,"Nicht betriebsbereite PC´s"
end sub
Vielen Dank für die Hilfe
mfg
Claus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 74138
Url: https://administrator.de/contentid/74138
Ausgedruckt am: 17.11.2024 um 09:11 Uhr
9 Kommentare
Neuester Kommentar
Hallo cbli!
Vielleicht mit einem Status-Array "checked()":
Grüße
bastla
P.S.: Ungetestet, und (erkennbar zB an den fest verdrahteten Array-Größen) nur als Grobentwurf gedacht.
Vielleicht mit einem Status-Array "checked()":
Dim remuser(6,1)
remuser(0,0) = "Frau Müller"
remuser(1,0) = "Herr Maier"
remuser(2,0) = "Herr Kohler"
remuser(3,0) = "Frau Beck"
remuser(4,0) = "Frau Rose"
remuser(5,0) = "Frau Schmidt"
remuser(6,0) = "Herr Himst"
remuser(0,1) = "192.168.115.11"
remuser(1,1) = "192.168.115.12"
remuser(2,1) = "192.168.115.13"
remuser(3,1) = "192.168.115.14"
remuser(4,1) = "192.168.115.15"
remuser(5,1) = "192.168.115.16"
remuser(6,1) = "192.168.115.17"
Dim checked(6)
If Checkbox1.Checked Then checked(0) = True
...
If Checkbox7.Checked Then checked(6) = True
For i = 0 To 6
If checked(i) Then
Code = Herunterfahren(remuser(i, 1))
If Code = -1 Then
fehlerliste = fehlerliste & "PC des Benutzers: " & remuser(i, 0) & " läuft nicht" & vbCrLF & vbCrLF
Else
MsgBox "Rechner: " & remuser(i, 0) & " wird heruntergefahren. Returncode = " & Code ,64,"Hinweis"
If Code = 0 Then
okliste = okliste & "PC des Benutzers: " & remuser(i, 0) & " wurde heruntergefahren" & vbCrLF & vbCrLF
Else
fehlerliste = fehlerliste & "PC des Benutzers: " & remuser(i, 0) & " meldete Code " & Code & vbCrLF & vbCrLF
End If
End If
End If
Next
MsgBox okliste ,,"Heruntergefahrene PC"
MsgBox fehlerliste ,,"Nicht betriebsbereite PC"
Function Herunterfahren(IP)
user = "administrator"
password = "xxxxxx"
Set obj = GetObject("winmgmts:Win32_PingStatus.Address='" & IP & "'")
If IsNull(obj.StatusCode) Or obj.StatusCode <> 0 Then
Herunterfahren = -1
Else
On Error Resume Next
Set wmi = CreateObject("WBemScripting.SWBemLocator")
Set cs = wmi.ConnectServer(IP,"root/cimv2",user,password)
Set col = cs.InstancesOf("Win32_OperatingSystem")
For Each obj In col
rc = obj.Shutdown
Next
Herunterfahren = rc
End If
End Function
Grüße
bastla
P.S.: Ungetestet, und (erkennbar zB an den fest verdrahteten Array-Größen) nur als Grobentwurf gedacht.
Hallo cbli!
Ich weiß ja nicht, wie dieser Code aufgerufen wird, aber eigentlich wäre ich davon ausgegangen, dass dies erst beim Klick auf eine Schaltfläche "Ausführen" oä geschieht. Somit würden auch die Listen nur einmal ausgegeben.
Die "MsgBox" in der Schleife könntest Du, wenn denn die unmittelbare Rückmeldung tatsächlich gewünscht / erforderlich wäre, durch ein 3-Sekunden-"Popup" ersetzen, etwa:
Grüße
bastla
Ich weiß ja nicht, wie dieser Code aufgerufen wird, aber eigentlich wäre ich davon ausgegangen, dass dies erst beim Klick auf eine Schaltfläche "Ausführen" oä geschieht. Somit würden auch die Listen nur einmal ausgegeben.
Die "MsgBox" in der Schleife könntest Du, wenn denn die unmittelbare Rückmeldung tatsächlich gewünscht / erforderlich wäre, durch ein 3-Sekunden-"Popup" ersetzen, etwa:
Set WshShell = WScript.CreateObject("WScript.Shell")
R = WshShell.Popup("Rechner: " & remuser(i,0) & " wird heruntergefahren. Returncode = " & Code, 3, "Hinweis", vbOK + vbInformation)
Grüße
bastla
Hallo cbli!
Du könntest vielleicht doch das oben beschriebene "Popup" (mit einer längeren Anzeigedauer) verwenden, um einen Hinweis darauf zu erhalten, dass das Script noch läuft.
Grüße
bastla
P.S.: Wenn's dann für Dich gut genug ist, magst Du vielleicht Deine gesamte Lösung (mit ev angepasstem Threadtitel) hier reinstellen?
Du könntest vielleicht doch das oben beschriebene "Popup" (mit einer längeren Anzeigedauer) verwenden, um einen Hinweis darauf zu erhalten, dass das Script noch läuft.
Grüße
bastla
P.S.: Wenn's dann für Dich gut genug ist, magst Du vielleicht Deine gesamte Lösung (mit ev angepasstem Threadtitel) hier reinstellen?
Hallo cbli!
verwenden und dieser bei jedem Schleifendurchlauf die aktuelle Info als "Value" zuweisen:
Auch Dir ein schönes Wochenende
bastla
wshshell.popup scheint unter hta nicht zu funktionieren.
Da Du ja eine Art "Statusinfo" ausgeben willst, könntest Du als Ersatz dafür doch eigentlich auch zB eine Textbox<input type="text" name="StatusTextBox" size="60">
...
StatusTextBox.Value = "Rechner: " & remuser(i,0) & " wird heruntergefahren. Returncode = " & Code
...
Ach ja,wenn ich meine Lösung hier reinstelle,dann komplett mit HTA Code oder nur den VB Script Teil ?
Da es im Forum ohnehin kaum Beispiele zu HTA gibt (und auch ich selbst mich noch nicht wirklich damit beschäftigt habe), würde ich auf jeden Fall das Gesamtpaket vorziehen - abgesehen davon sollst Du ja Dein HTA nicht unter den Scheffel stellen .Auch Dir ein schönes Wochenende
bastla