#include #include #include #include Global $app = "Update Classroom Extensions" ; Paths to files Global $frooms = @ScriptDir & "\rooms.ini" Global $fadmins = @ScriptDir & "\admins.ini" Global $pscplog = @ScriptDir & "\pscp.log" ; File handles Global $hrooms = FileOpen($frooms, 2) Global $hadmins = FileOpen($fadmins, 2) Global $line ; Check files/handles are OK If $hrooms = -1 Then MsgBox(0, "Error", "Unable to open file.") Exit EndIf If $hadmins = -1 Then MsgBox(0, "Error", "Unable to open file.") Exit EndIf ; Create objects ; Main ones $shell = ObjCreate("wscript.shell") $net = ObjCreate("wscript.network") ;AD objects for locations $adcnx_l = ObjCreate("ADODB.Connection") $adcmd_l = ObjCreate("ADODB.Command") ;AD objects for machines $adcnx_m = ObjCreate("ADODB.Connection") $adcmd_m = ObjCreate("ADODB.Command") ; Init AD stuff for locations $adcnx_l.Provider = "ADsDSOObject" $adcnx_l.Open("Active Directory Provider") $adcmd_l.ActiveConnection = $adcnx_l ; Init AD stuff for machines $adcnx_m.Provider = "ADsDSOObject" $adcnx_m.Open("Active Directory Provider") $adcmd_m.ActiveConnection = $adcnx_m ; Room names - AD locations. Global $rooms[9] $rooms[0]="BBS/Main Site/ICT/ICT1" $rooms[1]="BBS/Main Site/ICT/ICT2" $rooms[2]="BBS/Main Site/ICT/ICT3" $rooms[3]="BBS/Main Site/ICT/ICT4" $rooms[4]="BBS/Main Site/ICT/SDYC" $rooms[5]="BBS/Main Site/ICT/PIL1" $rooms[6]="BBS/Main Site/ICT/PIL2" $rooms[7]="BBS/Main Site/Room44" $rooms[8]="BBS/Main Site/Techsuite" ; Teacher PCs to be excluded (added to 'supervisor' list) $exclude = "ICT1-TEACHER,ICT1-16,SDYC-30,SDYC-TEACHER,ICT2-TEACHER,ICT3-TEACHER,ICT4-TEACHER,RM39-TECH,WEBMAN,BOSSMAN,PIL1-TEACHER,PIL2-TEACHER" $exclude = StringSplit($exclude, ",") ToolTip("Getting IP addresses ...", 100, 100, $app, 1) ; Do it For $i = 0 To UBound($rooms)-1 ; This room $roomparts = StringSplit($rooms[$i], "/", 1) $roomname = $roomparts[UBound($roomparts)-1] ;msgbox(0, "", $roomname) FileWriteLine($hrooms, "[" & $roomname & "]") ; Set up query $adcmd_m.CommandText = "SELECT Name, Location FROM 'LDAP://DC=BBARRINGTON,DC=internal' WHERE objectClass='computer' AND isCriticalSystemObject='FALSE' AND location='" & $rooms[$i] & "' ORDER BY Name" $adcmd_m.Properties("Page Size") = 10000 $adcmd_m.Properties("Timeout") = 10 $adcmd_m.Properties("Searchscope") = 2 $adcmd_m.Properties("Cache Results") = False ; Run query $adrecords_m = $adcmd_m.Execute ; Loop If $adrecords_m.EOF <> True Then $adrecords_m.MoveFirst Do ; Get PC name $pc = $adrecords_m.Fields("name").Value ; Is this PC in the exclude list? $s = _ArraySearch($exclude, $pc) If $s = -1 Then ; OK, it's not... ; Get IP $ip = TCPNameToIP($pc) ; Check for an IP address If $ip <> "" Then ; Write line to file $w = FileWriteLine($hrooms, $ip) ; & " (" & $pc & ")") EndIf EndIf ; Continue loop $adrecords_m.Movenext Until $adrecords_m.EOF EndIf Next ; Wait until file is done Do sleep(10) $contents = FileRead($hrooms, FileGetSize($frooms)) Until StringLen($contents) = FileGetSize($frooms) ; Close this file FileClose($hrooms) ; Now we should get the supervisor IPs For $i = 1 To UBound($exclude)-1 $pc = $exclude[$i] ; Get IP $ip = TCPNameToIP($pc) ; Check for an IP address If $ip <> "" Then $ip = StringStripWS($ip, 8) $ip = StringStripCR($ip) $w = FileWriteLine($hadmins, $ip) EndIf Next ; Wait until file is done Do sleep(10) $contents = FileRead($hadmins, FileGetSize($fadmins)) Until StringLen($contents) = FileGetSize($fadmins) ; Close admins file FileClose($hadmins) ; Copy putty files FileInstall("pscp.exe", @ScriptDir & "\pscp.exe", 1) FileInstall("plink.exe", @ScriptDir & "\plink.exe", 1) ToolTip("Uploading files ...", 100, 100, $app, 1) ; Upload rooms $command = "pscp -v -batch -P 222 -i key.ppk " & $frooms & " root@10.0.0.1:/var/ipcop/proxy/advanced/cre/classrooms > " & $pscplog & " 2>&1" $result = RunWait(@ComSpec & " /c " & $command, @WorkingDir, @SW_HIDE) ; Upload admins $command = "pscp -v -batch -P 222 -i key.ppk """ & $fadmins & """ root@10.0.0.1:/var/ipcop/proxy/advanced/cre/supervisors >> " & $pscplog & " 2>&1" $result = RunWait(@ComSpec & " /c " & $command, @WorkingDir, @SW_HIDE) ToolTip("Restarting Squid ...", 100, 100, $app, 1) ; Run remote command $command = "plink root@10.0.0.1 -P 222 -i key.ppk /usr/local/bin/restartsquid" RunWait(@Comspec & " /c " & $command, @WorkingDir, @SW_HIDE) Exit