Jump to content



Photo

Simple Yet Effective


  • Please log in to reply
2 replies to this topic

#1 bran8

bran8

    Seeker

  • New Members
  • 1 posts

Posted 05 May 2006 - 03:40 PM

I am currently working on a BITSAdmin Wrapper for AutoIt 3 (beta).
This is one of my very first AutoIt scripts.

Feel free to check it out and provide some feedback if you can help make the code more efficient.

###

BITSAdmin Tool by Microsoft
Download BITS from Microsoft

BITSAdmin is a command-line tool that you can use to create download or upload jobs and monitor their progress.

Plain Text         
#include-once #comments-start  ----------------------------------------------------------------------------  Tested with AutoIt 3.1.1.120 BETA                              ^^^^  BITSAdmin Wrapper Version 1.0  Known Issues:  ^^^^^^^^^^^^  * Job Names with spaces does not work on these functions:   : InvokeBITS_List, InvokeBITS_Complete, InvokeBITS_CompleteALL will not be unable to distinguish job names and job status   : If you chose to use spaces, excplicitly specify the job to act on.  Author:         Brandon Lai (BRANNYBOY8@ROGERS.COM, LAIBR@WYETH.COM)  Author Notes:     The purpose is to easily integrate BITSAdmin into your AU3 scripts.  Functions  ^^^^^^^^^  MsgArray($ArrayOfData): Display array of data in multiple MsgBoxes, $ArrayOfData[0] = # of lines in arrray  InvokeBITS($rawcommand): Invoke BITSAdmin using your own command, use "quotes" where appropriate  InvokeBITS_Create($JobName,[$JobDescription]): Cancel and Create new job, returns Job GUID  InvokeBITS_List(): Returns array [n][x], where x = <GUID> <JobName> <Status> <FilesDone> <FilesLeft> <BytesDone> <BytesLeft>  InvokeBITS_AddFile($JobName,$RemoteFile,$LocalFile): Returns TRUE if "added", Transfers a file over HTTP to local PC  InvokeBITS_Complete($JobName): Returns TRUE if job has TRANSFERRED, Writes job files to disk  InvokeBITS_CompleteALL(): Returns number of JOBs completed  InvokeBITS_GetState($JobName): Returns state of job  InvokeBITS_SetPriority($JobName,(LOW,NORMAL,HIGH)): Sets priority of job    Requirements:   - Tested with BITSAdmin.exe 1.0 [ 5.1.2600.0 ]    Notes:   -  Revisions:  23 APR 2006 - Version 1.0     ---------------------------------------------------------------------------- #comments-end ; Default Global Settings (optional) Dim $LinesPerPage = 24; for MsgArray, how many lines to display per MsgBox? Dim $BITSBuffer = 256; STDOUT for BITSAdmin.exe buffer allocated before subscript out of range Dim $MaxJobs = 64; when declaring array of jobs, max jobs to manage before subscript out of range Func InvokeBITS(Const $BITSCmd)     If not IsDeclared("BITSBuffer") then Dim $BITSBuffer = 256     If not FileExists("BITSADMIN.EXE") then         MsgBox(0,"","BITSADMIN.EXE not found, please add to path.")         Exit     EndIf         $foo = Run(@Comspec & ' /C BITSADMIN.EXE /RAWRETURN /WRAP ' & $BITSCmd,"", @SW_HIDE, 3)     Dim $BITSOutput[$BITSBuffer]     Dim $n=1     While 1             $BITSOutput[$n] = StdoutRead($foo)             If @error = -1 Then ExitLoop             $n = $n + 1     Wend         $BITSOutput[0] = ($n - 1)         Return $BITSOutput EndFunc func MsgArray(byref $BITSResult) If Not IsDeclared("LinesPerPage") Then Dim $LinesPerPage = 24 Dim $RESULTText     For $0 = 1 to $BITSResult[0]         $RESULTText = $RESULTText & $BITSResult[$0]     if mod($0,$LinesPerPage) = 0 then         msgbox(0,"",$RESULTText)         $RESULTText = ""         EndIf     Next msgbox(0,"",$RESULTText) EndFunc ; *************************** ; ** BITS Helper Functions ** ; *************************** Func InvokeBITS_Create(Const $JobName,$JobDispName = "") ; Cancel and Create $JobName, returns GUID of new job     InvokeBITS("/CANCEL " & $JobName)     $CreatedJob = InvokeBITS("/CREATE " & $JobName)     If Not $JobDispName = "" Then     $CreatedJob = InvokeBITS('/SETDESCRIPTION '&$JobName&' "'&$JobDispName&'"')     EndIf     Return $CreatedJob[1] EndFunc Func InvokeBITS_List() ; Returns array of jobs where element [0][0] = number of jobs ; [n][x], where x = <GUID> <JobName> <Status> <FilesDone> <FilesLeft> <BytesDone> <BytesLeft> If Not IsDeclared("MaxJobs") then Dim $MaxJobs = 100     Dim $BITSArray[$BITSBuffer]     Dim $BITSJobArray[$MaxJobs][8]     $BITSArray = InvokeBITS("/LIST")         $BITSJobArray[0][0] = $BITSArray[0]; Store # of jobs     For $0 = 1 to $BITSArray[0]         $BITSJob = StringSplit($BITSArray[$0]," ")         $BITSJobArray[$0][1] = $BITSJob[1]; GUID         $BITSJobArray[$0][2] = $BITSJob[2]; JobName         $BITSJobArray[$0][3] = $BITSJob[3]; Status         $BITSJobArray[$0][4] = $BITSJob[4]; File(s) Done         $BITSJobArray[$0][5] = $BITSJob[6]; File(s) Total         $BITSJobArray[$0][6] = $BITSJob[7]; Byte(s) Done         $BITSJobArray[$0][7] = $BITSJob[9]; Byte(s) Total     Next     Return $BITSJobArray EndFunc func InvokeBITS_AddFile(Const $JobName,Const $RemoteFile,Const $LocalFile) ; Addfile and Resume job     Dim $BITSArray[$BITSBuffer]     $BITSArray = InvokeBITS('/ADDFILE "' & $JobName & '" "' & $RemoteFile &'" "' & $LocalFile & '"')     InvokeBITS('/RESUME "' & $JobName & '"')        If StringLeft($BITSArray[1],5) = "Added" then         return true     Else         return false     EndIf EndFunc func InvokeBITS_GetState(Const $JobName) ; Return state of JOB ie. SUSPENDED, TRANSFERRED, TRANSFERRING     Dim $BITSArray[$BITSBuffer]     $BITSArray = InvokeBITS('/GETSTATE "' & $JobName & '"')     Return $BITSArray[1] EndFunc func InvokeBITS_SetPriority(Const $JobName,Const $Priority) ; Set priority to HIGH, NORMAL, LOW     Dim $BITSArray[$BITSBuffer]     $BITSArray = InvokeBITS('/SETPRIORITY "' & $JobName & '" "' & $Priority & '"')     Return $BITSArray[1] EndFunc func InvokeBITS_Complete(Const $JobName) ; Try to complete job, return true if successful, Warning: case sensitive!     Dim $BITSJobArray[$MaxJobs][8]     $BITSJobArray = InvokeBITS_List()     For $0 = 1 to $BITSJobArray[0][0]         If $BITSJobArray[$0][2] = $JobName then             if $BITSJobArray[$0][3] = "TRANSFERRED" Then                 Dim $BITSResult[$BITSBuffer]                 $BITSResult = InvokeBITS("/COMPLETE " & $JobName)                 Return true             Else                 Return false             EndIf         EndIf     Next     return false EndFunc func InvokeBITS_CompleteALL() ; Try to complete ALL jobs in queue, returns number of jobs completed     Dim $BITSJobArray[$MaxJobs][8]     dim $NumCompleted = 0     $BITSJobArray = InvokeBITS_List()     For $0 = 1 to $BITSJobArray[0][0]                 MsgBox(0,"Debug",'/COMPLETE "' & $BITSJobArray[$0][1] & '"')                 MsgBox(0,"Debug",'Array 3 "' & $BITSJobArray[$0][3] & '"')                 if $BITSJobArray[$0][3] = "TRANSFERRED" Then                 Dim $BITSResult[$BITSBuffer]                 $BITSResult = InvokeBITS('/COMPLETE "' & $BITSJobArray[$0][1] & '"')                 $NumCompleted = $NumCompleted + 1             EndIf     Next     return $NumCompleted EndFunc func InvokeBITS_ResumeALL() ; Try to resume ALL jobs in queue, returns number of jobs resumed     Dim $BITSJobArray[$MaxJobs][8]     dim $NumCompleted = 0     $BITSJobArray = InvokeBITS_List()     For $0 = 1 to $BITSJobArray[0][0]                 Dim $BITSResult[$BITSBuffer]                 $BITSResult = InvokeBITS("/RESUME " & $BITSJobArray[$0][1])                 If $BITSResult[1] = "Job resumed." then $NumCompleted = $NumCompleted + 1                   Next     return $NumCompleted EndFunc


I have attached a ZIP file containing the above code and 2 examples.

Brandon.

PS - How do I change the topic of this post? I created in error instead of replying to someone elses post.

Attached Files


Edited by bran8, 05 May 2006 - 04:11 PM.






#2 theguy0000

theguy0000

    Benevolent Dictator

  • Active Members
  • PipPipPipPipPipPip
  • 3,750 posts

Posted 05 May 2006 - 04:01 PM

you can't change the title of topics. as far as i know.
The cake is a lie.www.theguy0000.com is currentlyUP images.theguy0000.com is currentlyUP all other *.theguy0000.com sites are DOWN

#3 fcjoe

fcjoe

    Wayfarer

  • Active Members
  • Pip
  • 53 posts

Posted 27 August 2010 - 02:28 PM

You just saved me a lot of work, I was afraid I would have to write all this code myself. Have you made any updates?

Thanks man.
Joe




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users