Hmm - seems that is exactly what you asked for! ;\)

If you call the function with no argument, you get the information from the local computer. You're calling it with $Computer, which is empty. Your loop read the contents of the file, assigning each name to $Computer, but then did nothing with it! The last read, which had no data, cleared $Computer, so when you finally called the WMISysInfo(), it had an empty argument and displayed the results of the local computer (only).

Here's what you really need - the code that actually does the work to be inside your enumeration loop! I also modified the error check, so that it complained (but didn't quit) if there was an error accessing the computer.
 Code:
Break On

; print the header
'Drv      Capacity           Free        <!>' ?

;=====================================================
; Define the name of your test computer
; (later, enumerate a list of computers in a loop)
; $Computer = 'COMPUTER'

If Open(3, "C:\servers.TXT") = 1
  $Computer = ReadLine(3)
  While Not @ERROR

    ; reporting code goes here...  YES - THE CODE THAT DOES THE WORK!!

    ; load the array from the computer
    $aSysInfo = WMISysInfo($Computer)
    If UBound($aSysInfo) = -1
      'Bad computer name or no access! (' $Computer ')' ? 
    Else
      $Computer ?
      ; Examine the disk drives & capacities
      $D_Letters    = Split($aSysInfo[32], ',')
      $D_Capacities = Split($aSysInfo[33], ',')
      $D_FreeSpace  = Split($aSysInfo[34], ',')

      For $Index = 0 to UBound($D_Letters)
        Left($D_Letters[$Index] + '               ', 4) ; 15 spaces between quotes
        Right(' ' + CDbl($D_Capacities[$Index]) / 1048576.0, 15)
        Right(' ' + CDbl($D_FreeSpace[$Index]) / 1048576.0, 15)
        If CDbl($D_FreeSpace[$Index]) < 500000
          '   <Low!>'
        EndIf
        ?
      Next 
    EndIf

    $Computer = ReadLine(3)
  Loop
  $ = Close(3)
EndIf

;=====================================================

Glenn
_________________________
Actually I am a Rocket Scientist! \:D