Glenn,

Very nice.. but I want a bit more... The script i created puts several computers in an array. Every computer starts the same command but at a different time. For example every 30minutes. ScheduleTask - Array problem
Code:

;Schedule a task on multiple computers
;
;
;Dependencies: UDF's: Scheduletask, Serialtime, DateMath, SerialDate, abs.
; Domain Scan and OS filter ; Netview2, Osid (Both UDF's aren't included in this script)
; Service: Task Scheduler must be installed and running.
; Tools: Jt.exe
Break On

; Calling UDF's
;--------------
;Call "@ScriptDir\UDF\Scheduletask.udf"
;Call "@ScriptDir\UDF\Serialtime.udf"
;Call "@ScriptDir\UDF\DateMath.udf"
;Call "@ScriptDir\UDF\SerialDate.udf"
;Call "@ScriptDir\UDF\abs.udf"
;Call "@ScriptDir\UDF\Netview2.udf"
;Call "@ScriptDir\UDF\Osid.udf"

; variables
;----------
Dim $computers, $comp, $name, $date, $type, $cmd, $timediff, $time, $rc


$name='test'
$date=@date ; '2003/12/31'
$type='ONCE'
$cmd='notepad'
$timediff='00:30'
$time='23:29'
$starthour=Split($time,':')[0]

; Domain scan
;------------------------------
;
;$computers=netview2(Domain)
;
$computers = 'comp1','comp2','comp3','comp4','comp5','comp6'; etc
For Each $comp In $computers

; filter
;------------------------------
;$os = osid($comp)
;
;If $os[1]='Win2K' AND $os[2]<>'Workstation' AND InStr($comp,"comp")<>0


; Date Format
;------------
;$d = Split($date,'/')[1] + '/' + Split($date,'/')[2] + '/' + Split($date,'/')[0]

; Date /Time
;------------------------------
$time=serialtime(serialtime($time)+serialtime($timediff))
$day=Val(Split($time,':')[0])
$hour=Split($time,':')[1]
$minute=Split($time,':')[2]
$time=$hour+':'+$minute
If $time='24:00'
$time='00:00'
$date=DateMath($date, 1)
EndIf
If $day>0
$date=DateMath($date, $day)
EndIf

; Schedule Task
;------------------------------

?''
$tsk='\\server1\log$\'+$comp+'.txt'
? 'Task will be scheduled on '+$comp+' on '+$date+' at '+$time
$rc=scheduletask($name, $comp, $date, $time, $type, $cmd)
? 'Error '+@ERROR+' - '+@SERROR
Shell "%COMSPEC% /e:1024 /c schtasks /query /S "+$comp+" > "+$tsk
; jt gives an error. Schtasks shows Tasks scheduled on Windows XP and 2000
? 'Error '+@ERROR+' - '+@SERROR
Next


Exit


;UDF'S
;-----

;Function serialtime
;-------------------
Function serialtime($strtime)
Dim $day,$days,$hours, $minutes, $seconds, $milliseconds
If InStr($strtime,':')
$strtime=Split($strtime,':')
Select
Case Ubound($strtime)<3
ReDim preserve $strtime[3]
If InStr($strtime[2],'.')
$strtime[3]=Right($strtime[2],Len($strtime[2])-InStr($strtime[2],'.'))
$strtime[2]=Left($strtime[2],InStr($strtime[2],'.')-1)
Else
$strtime[3]=0
EndIf
Case Ubound($strtime)>3
$serialtime=-1
Exit 87
EndSelect
$hours=Val($strtime[0])
If $hours>23
$days=Val($hours/24)
For $day=1 to $days
$hours=$hours-24
Next
Else
$days=0
EndIf
If $hours<0
$serialtime=-1
Exit 87
EndIf
$minutes=Val($strtime[1])
If $minutes<0 OR $minutes>59
$serialtime=-1
Exit 87
EndIf
$seconds=Val($strtime[2])
If $seconds<0 OR $seconds>59
$serialtime=-1
Exit 87
EndIf
$milliseconds=CDbl($strtime[3])
If $milliseconds<0 OR $milliseconds>999
$serialtime=-1
Exit 87
EndIf
$serialtime=0.0+($days*86400)+($hours*3600)+($minutes*60)+($seconds)+($milliseconds/1000)
Else
$strtime=Val(CDbl($strtime)*1000)
If $strtime>=0
If $strtime>86400000
$days=$strtime/86400000
For $day=1 to $days
$strtime=$strtime-86400000
Next
If Len($days)<2
$days=Right('00'+$days,2)
EndIf
Else
$days='00'
EndIf
$hours=$strtime/3600/1000
$strtime=$strtime-($hours*3600*1000)
$hours=Right('00'+$hours,2)
$minutes=$strtime/60/1000
$strtime=$strtime-($minutes*60*1000)
$minutes=Right('00'+$minutes,2)
$seconds=$strtime/1000
$strtime=$strtime-($seconds*1000)
$seconds=Right('00'+$seconds,2)
$milliseconds=Left($strtime,3)
$milliseconds=Right('000'+$milliseconds,3)
$serialtime=$days+':'+$hours+':'+$minutes+':'+$seconds+'.'+$milliseconds
Else
$serialtime='-1'
Exit 87
EndIf
EndIf
EndFunction


;Function scheduletask
;---------------------
Function scheduletask($name, $comp, $date, $time, $type, $cmd, optional $prms, optional $user, optional $pw, optional $comment,
optional $typeargs, optional $jt)
Dim $jtexe[3], $shellcmd, $path

If $name='' OR $comp='' OR $date='' OR $time='' OR $type='' OR $cmd=''
Exit 87
EndIf

; create an array of potential filepaths to jt.exe
$jtexe[0]=$jt
$jtexe[1]=@STARTDIR+'\jt.exe'
$jtexe[2]=@SCRIPTDIR+'\jt.exe'
$jtexe[3]=@CURDIR+'\jt.exe'
$path=Split('%PATH%',';')
For Each $jt In $path
ReDim preserve $jtexe[Ubound($jtexe)+1]
$jtexe[Ubound($jtexe)]=Join(Split($jt+'\jt.exe','\\'),'\')
Next

; check each filepath for the presence of jt.exe
For Each $jt In $jtexe
If Exist($jt) AND NOT (GetFileAttr($jt) & 16) AND Ubound($jtexe)+1
$jtexe=$jt
EndIf
Next
Select
Case Ubound($jtexe)+1
Exit 2
Case NOT Exist($jtexe)
Exit 2
EndSelect

If Left($comp,2)<>'\\'
$comp='\\'+$comp
EndIf

If Right($name,4)<>'.job'
$name=$name+'.job'
EndIf

Select
Case $date='TODAY'
; valid format
Case Len($date)<>10
Exit 87
Case Right(Left($date,3),1)='/'
; valid format
Case Right(Left($date,5),1)='/'
; reformat date
$date=Split($date,'/')
$date=$date[1]+'/'+$date[2]+'/'+$date[0]
Case 1
Exit 87
EndSelect

; delete a potentially existing task
$shellcmd = $jtexe
If $user AND $pw
$shellcmd = $shellcmd+ ' /SC "'+$user+'" "'+$pw+'"'
EndIf
$shellcmd = $shellcmd+ ' /SM '+$comp
$shellcmd = $shellcmd+ ' /SD "'+$name+'"'

Shell '%COMSPEC% /e:1024 /c '+$shellcmd+' >NUL 2>NUL'

$shellcmd = $jtexe

If $user AND $pw
$shellcmd = $shellcmd+ ' /SC "'+$user+'" "'+$pw+'"'
EndIf

$shellcmd = $shellcmd+ ' /SM '+$comp
$shellcmd = $shellcmd+ ' /SJ ApplicationName="'+$cmd+'"'

If $prms
$shellcmd = $shellcmd+ ' Parameters="'+$prms+'"'
EndIf

$shellcmd = $shellcmd+ ' WorkingDirectory="%SYSTEMROOT%"'
$shellcmd = $shellcmd+ ' Comment="'+$comment+'"'
$shellcmd = $shellcmd+ ' Creator="'+@userid+'"'
$shellcmd = $shellcmd+ ' Priority=Normal'
$shellcmd = $shellcmd+ ' MaxRunTime=3600000'
$shellcmd = $shellcmd+ ' DontStartIfOnBatteries=0'
$shellcmd = $shellcmd+ ' KillIfGoingOnBatteries=0'
$shellcmd = $shellcmd+ ' RunOnlyIfLoggedOn=0'
$shellcmd = $shellcmd+ ' SystemRequired=0'
$shellcmd = $shellcmd+ ' DeleteWhenDone=1'
$shellcmd = $shellcmd+ ' Suspend=0'
$shellcmd = $shellcmd+ ' StartOnlyIfIdle=0'
$shellcmd = $shellcmd+ ' KillOnIdleEnd=0'
$shellcmd = $shellcmd+ ' RestartOnIdleResume=0'
$shellcmd = $shellcmd+ ' Hidden=0'
$shellcmd = $shellcmd+ ' TaskFlags=0'

$shellcmd = $shellcmd+ ' /CTJ StartDate='+$date
$shellcmd = $shellcmd+ ' StartTime='+$time
$shellcmd = $shellcmd+ ' HasEndDate=0'
$shellcmd = $shellcmd+ ' KillAtDuration=0'
$shellcmd = $shellcmd+ ' Disabled=0'
$shellcmd = $shellcmd+ ' Type='+$type
If $typeargs
$shellcmd = $shellcmd+ ' TypeArguments='+$typeargs
EndIf
$shellcmd = $shellcmd+ ' /SAJ "'+$name+'"'

Shell '%COMSPEC% /e:1024 /c '+$shellcmd+' >NUL 2>NUL'
$scheduletask=@ERROR
Exit @ERROR
EndFunction


;Function DateMath
;-----------------
Function DateMath($ExpD1,$ExpD2)
Select
Case InStr($ExpD1,'/') AND InStr($ExpD2,'/')
; two date passed - return daysbetween integer
$DateMath=serialdate($ExpD1)-serialdate($ExpD2)
If $DateMath<0
$DateMath=$DateMath*-1
EndIf
Case InStr($ExpD1,'/') AND 1-InStr($ExpD2,'/')
; date and a number passed - return date
$ExpD2=0+$ExpD2
$Datemath=serialdate(serialdate($ExpD1)+$ExpD2)
Case 1 ; incorrect parameters passed
EndSelect
EndFunction


;Function serialdate
;-------------------
Function serialdate($ExpD)
Dim $z,$h,$a,$b,$c,$y,$m,$d
If InStr($ExpD,'/')
$ExpD=Split($ExpD,'/')
$y=Val($ExpD[0])
$m=Val($ExpD[1])
$d=Val($ExpD[2])
If $m<3
$m=$m+12
$y=$y-1
EndIf
$SerialDate=$d+(153*$m-457)/5+365*$y+$y/4-$y/100+$y/400-306
Else
$z=0+$ExpD+306
$h=100*$z-25
$a=$h/3652425
$b=$a-$a/4
$y=(100*$b+$h)/36525
$c=$b+$z-365*$y-$y/4
$m=(5*$c+456)/153
$d=$c-(153*$m-457)/5
If $m>12
$y=$y+1
$m=$m-12
EndIf
$SerialDate=Right('0000'+$y,4)+'/'+Right('00'+$m,2)+'/'+Right('00'+$d,2)
EndIf
EndFunction


;FUNCTION ABS
;------------
Function abs($Expr)
;returns the absolute value of a number
$Expr=0+$Expr
If $Expr<0
$Expr=-1*$Expr
EndIf
$abs=$Expr
EndFunction


;FUNCTION OSID
;-------------
Function osid(optional $sComp)
Dim $osidarray[11]

Dim $iINWIN, $sDOS, $iBUILD, $sCSD, $iPRODUCTSUITE, $sPRODUCTTYPE


Dim $operating_system, $sp_level, $os_suite, $os_short, $productsuite
Dim $os_type, $os_role, $os_flavor, $os_subver, $regkey
Dim $os_build, $os_proc, $os_owner, $os_org, $os_key, $os_date, $os_oem
Dim $os_lang

$sComp=Trim($sComp)
Select
Case $sComp=@WKSTA
$sComp=''
Case $sComp AND NOT KeyExist('\\'+$sComp+'\HKLM')
Exit 2
Case $sComp
$sComp='\\'+$sComp+'\'
EndSelect

; fetch all macro info depending on whether it's remote or local
If $sComp
If KeyExist($sComp+'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList')
$iINWIN=1
$sDOS=ReadValue($sComp+'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion','CurrentVersion')
$iBUILD=ReadValue($sComp+'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion','CurrentBuildNumber')
$sCSD=ReadValue($sComp+'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion','CSDVersion')
If $sDOS='4.0' AND ReadValue($sComp+'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Hotfix\Q246009','Installed')
$sCSD=$sCSD+'a'
EndIf
$sPRODUCTTYPE=ReadValue($sComp+'HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions',
'ProductType')
Select
Case $sPRODUCTTYPE='WinNT'
If $sDOS='4.0'
$sPRODUCTTYPE='Workstation'
Else
$sPRODUCTTYPE='Professional'
EndIf
Case $sPRODUCTTYPE='ServerNT'
If $sDOS='5.2'
$sPRODUCTTYPE=''
Else
$sPRODUCTTYPE='Server'
EndIf
Case $sPRODUCTTYPE='LANManNT'
$sPRODUCTTYPE='Domain Controller'
Case 1
$sPRODUCTTYPE='Home Edition'
EndSelect
$sPRODUCTTYPE=ReadValue($sComp+'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion','ProductName')+' '+$sPRODUCTTYPE
$sPRODUCTTYPE=Join(Split($sPRODUCTTYPE,'Microsoft'),'')
$iPRODUCTSUITE=''
$os_lang=$sComp+Join(Split(ReadValue($sComp+'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion','SystemRoot'),':\'),'$\')+'\system32\shell32.dll'
$os_lang=GetFileVersion($os_lang,'Language')
Else
$iINWIN=2
$dDOS=ReadValue($sComp+'HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion','VersionNumber')
$dDOS=Split($dDOS,'.')
$iBUILD=$dDOS[Ubound($dDOS)]
ReDim preserve $dDOS[1]
$sDOS=Join($dDOS,'.')
$sCSD=''
$iPRODUCTSUITE=''
$sPRODUCTTYPE=ReadValue($sComp+'HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion','Version')
$os_lang=Right(''+ReadValue($sComp+'HKLM\SYSTEM\CurrentControlSet\Control\Nls\Locale',''),4)
EndIf
Else
$iINWIN=@INWIN
$sDOS=@DOS
$iBUILD=@BUILD
$sCSD=@CSD
$iPRODUCTSUITE=@PRODUCTSUITE
$sPRODUCTTYPE=@PRODUCTTYPE
$os_lang=@SYSLANG
EndIf

; set the correct registry key
If $iINWIN=1
$regkey='HKLM\Software\Microsoft\Windows NT\CurrentVersion'
Else
$regkey='HKLM\Software\Microsoft\Windows\CurrentVersion'
EndIf
If $sComp
$regkey=$sComp+$regkey
EndIf

; retrieve registered owner, organization, build, type
$os_owner=ReadValue($regkey,'RegisteredOwner')
$os_org=ReadValue($regkey,'RegisteredOrganization')
$os_proc=ReadValue($regkey,'CurrentType')
$os_build=Val($iBUILD)

Select
Case $iINWIN=1
; determine the operating system kernel
Select
Case $sDOS='6.0'
$operating_system='Windows Longhorn'
Select
Case $os_build=4015
$operating_system=$operating_system+' (Alpha Preview 3)'
Case $os_build=4008
$operating_system=$operating_system+' (Alpha Preview 2)'
Case 1
$operating_system=$operating_system+' (Alpha/Beta/RC)'
EndSelect
$os_short='WinLonghorn'
$os_key=ReadValue($regkey,'ProductID')
Case $sDOS='5.2'
$operating_system='Windows Server 2003'
$os_short='Win2K3'
$os_key=ReadValue($regkey,'ProductID')
Select
Case $os_build=3714
$operating_system=$operating_system+' (RC1)'
Case $os_build<3790
$operating_system=$operating_system+' (Alpha/Beta/RC)'
EndSelect
Case $sDOS='5.1'
$operating_system='Windows XP'
Select
Case $os_build=2250
$operating_system=$operating_system+' (Alpha)'
Case $os_build=2257
$operating_system=$operating_system+' (Alpha)'
Case $os_build=2410
$operating_system=$operating_system+' (Beta 1)'
Case $os_build=2416
$operating_system=$operating_system+' (Beta 1)'
Case $os_build=2462
$operating_system=$operating_system+' (Beta 2)'
Case $os_build=2465
$operating_system=$operating_system+' (Beta 2)'
Case $os_build=2496
$operating_system=$operating_system+' (RC1)'
Case $os_build=2505
$operating_system=$operating_system+' (RC1)'
Case $os_build=2526
$operating_system=$operating_system+' (RC2)'
Case $os_build=2542
$operating_system=$operating_system+' (RC3)'
EndSelect
$os_short='WinXP'
$os_key=ReadValue($regkey,'ProductID')
Case $sDOS='5.0'
$operating_system='Windows 2000'
Select
Case $os_build=1515
$operating_system=$operating_system+' (Beta 2)'
Case $os_build=2031
$operating_system=$operating_system+' (Beta 3)'
Case $os_build=2128
$operating_system=$operating_system+' (Beta 3 RC2)'
Case $os_build=2183
$operating_system=$operating_system+' (Beta 3)'
EndSelect
$os_short='Win2k'
$os_key=ReadValue($regkey,'ProductID')
Case $sDOS='4.0'
$operating_system='Windows NT 4.0'
$os_short='WinNT'
$os_key=ReadValue($regkey,'ProductID')
$os_key=Left($os_key,5)+'-'+SubStr($os_key,6,3)+'-'+SubStr($os_key,10,7)+'-'+Right($os_key,5)
Case 1
$operating_system='unknown'
$os_short='unknown'
EndSelect

; determine the service pack level
$sp_level=$sCSD
If InStr($sp_level,'Service Pack')
$sp_level=Split($sp_level,'Service Pack')
$sp_level=Trim($sp_level[Ubound($sp_level)])
Else
$sp_level=0
EndIf

; determine the product suite
$productsuite=Val($iPRODUCTSUITE)
$os_suite=''
If $productsuite
If $productsuite & 1
$os_suite=$os_suite+'Small Business |'
EndIf
If $productsuite & 2
$os_suite=$os_suite+'Enterprise |'
EndIf
If $productsuite & 4
$os_suite=$os_suite+'BackOffice |'
EndIf
If $productsuite & 8
$os_suite=$os_suite+'Communication Server |'
EndIf
If $productsuite & 16
$os_suite=$os_suite+'Terminal Server |'
EndIf
If $productsuite & 32
$os_suite=$os_suite+'Small Business (Restricted) |'
EndIf
If $productsuite & 64
$os_suite=$os_suite+'Embedded NT |'
EndIf
If $productsuite & 128
$os_suite=$os_suite+'DataCenter |'
EndIf
If $productsuite & 256
$os_suite=$os_suite+'Single User Terminal Server |'
EndIf
If $productsuite & 512
$os_suite=$os_suite+'Home Edition |'
EndIf
If $productsuite & 1024
$os_suite=$os_suite+'Blade Server |'
EndIf
If InStr($os_suite,'|')
$os_suite=Left($os_suite,Len($os_suite)-2)
EndIf
EndIf

; determine the producy type
$os_type=$sPRODUCTTYPE
Select
Case InStr($os_type,'Domain Controller')
$os_role='Domain Controller'
$os_flavor='Server'
Case InStr($os_type,'Server')
$os_role='Member Server'
$os_flavor='Server'
Case InStr($os_type,'Workstation')
$os_role='Workstation'
$os_flavor='Workstation'
Case InStr($os_type,'Professional')
$os_role='Workstation'
$os_flavor='Workstation'
Case InStr($os_type,'Tablet PC')
$os_role='Workstation'
$os_flavor='Tablet PC'
Case InStr($os_type,'Home Edition')
$os_role='Workstation'
$os_flavor='Workstation'
Case 1
$os_role='unknown'
$os_flavor='unknown'
EndSelect

$operating_system=$operating_system+' '+$os_flavor+' Service Pack '+$sp_level
If $os_suite<>''
$operating_system=$operating_system+' ['+$os_suite+']'
EndIf

; determine the installation date
$os_date=ReadValue('HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion','Installdate')

; determine the OEM Duplicator String
$os_oem=ReadValue('HKLM\System\Setup','OemDuplicatorString')

Case $iINWIN=2
$os_short='Win9x'
$os_role='Workstation'
$sp_level=0

$os_subver=Lcase(ReadValue($regkey,'SubVersionNumber'))

Select
Case $sDOS='4.90'
$operating_system='Windows ME'
$os_key=ReadValue($regkey,'ProductKey')
$os_flavor=''
Case $sDOS='4.10'
$operating_system='Windows 98'
$os_key=ReadValue($regkey,'ProductKey')
Select
Case InStr($os_subver,'c')
$os_flavor='SE'
Case InStr($os_subver,'b')
$os_flavor='B'
Case $os_subver=' a '
$os_flavor='Second Edition'
Case 1
$os_flavor='OEM'
EndSelect
Case $sDOS='4.0'
$operating_system='Windows 95'
$os_key=ReadValue($regkey,'ProductID')
Select
Case InStr($os_subver,'c')
$os_flavor='OSR 2.5'
Case InStr($os_subver,'b')
$os_flavor='OSR 2.0'
Case InStr($os_subver,'a')
$os_flavor=' Service Pack 1'
Case 1
$os_flavor=' OEM'
EndSelect
Case 1
$operating_system='unknown'
$os_short='unknown'
EndSelect

If $os_flavor
$operating_system=$operating_system+' '+$os_flavor
EndIf

EndSelect

$osidarray[0]=$operating_system
$osidarray[1]=$os_short
$osidarray[2]=$os_role
$osidarray[3]=$sp_level
$osidarray[4]=$os_build
$osidarray[5]=$os_proc
$osidarray[6]=$os_owner
$osidarray[7]=$os_org
$osidarray[8]=$os_key
$osidarray[9]=$os_date
$osidarray[10]=$os_oem
$osidarray[11]=$os_lang

$osid=$osidarray

EndFunction


;FUNCTION NetView2()
;-------------------
Function NetView2(optional $domain, optional $commentflag)
Dim $array[255]
Dim $ReDim, $i, $j, $tempfile
Dim $filehandle, $retcode, $line
Dim $name, $comment

$ReDim = 255
$i = 0
$j = 0
$tempfile = '%temp%\netview.tmp'

If $domain
$domain = '/domain:'+Trim($domain)
EndIf

If VarType($commentflag)
$commentflag=Val($commentflag)
Else
$commentflag=0
EndIf

If Exist($tempfile)
Del $tempfile
EndIf

Shell '%comspec% /c net view '+$domain+' >"'+$tempfile+'"'

If @error = 0
$filehandle=FreeFileHandle()
$retcode=Open($filehandle,$tempfile)

For $j = 1 to 5
$line = ReadLine($filehandle) ; skip headings
Next

While @error = 0
$name= Trim(SubStr($line,3,InStr($line,' ')-1))
$comment = Trim(Right($line,Len($line)-InStr($line,' ')))
If $commentflag
$array[$i]=$name+','+$comment
Else
$array[$i]=$name
EndIf
$i=$i+1
If $i = $ReDim
$ReDim=$ReDim*2
ReDim preserve $array[$ReDim]
EndIf
$line = ReadLine($filehandle)
Loop
$retcode=Close($filehandle)
Del $tempfile
If $i
ReDim preserve $array[$i-4]
$netview2 = $array
Exit @error
EndIf
EndIf

$netview2 = 0
Exit @error
EndFunction

_________________________
Co