View Single Post
Old 06-13-2009   #5 (permalink)
Al Dunbar


 
 

Re: recursive directory search


"Pegasus [MVP]" <news@xxxxxx> wrote in message
news:OtQIiGG7JHA.3304@xxxxxx
Quote:

>
> "Jeremy" <Jeremy@xxxxxx> wrote in message
> newsE300E1F-5875-4D17-8C8F-318BA7F99489@xxxxxx
Quote:

>> "Pegasus [MVP]" wrote:
>>
Quote:

>>>
>>> "Jeremy" <Jeremy@xxxxxx> wrote in message
>>> news:3D3742E7-BDA2-4C63-8518-FD4ED51F1402@xxxxxx
>>> >I modified the following script from one I found on the web. It
>>> >searches
>>> > through an array of computers and lists all of the user folders found
>>> > within
>>> > the documents and settings folders on my student computers. Would it
>>> > be
>>> > easy
>>> > to replace the array with something like 047ds* to just search all
>>> > student
>>> > computers in my building?
>>> > Thanks, Jeremy
>>> >
>>> > CODE
>>> > ----------------
>>> > '=========
>>> > arrServers = Array(_
>>> > "047ds-c303-21.student.cssd.ab.ca",_
>>> > "047ds-c312-20.student.cssd.ab.ca",_
>>> > "047ds-cts-05"
>>> > )
>>> >
>>> > strOutputFile = "StudentComputerProfiles.txt"
>>> > strStartFolder = "C:\Documents and Settings"
>>> >
>>> >
>>> > Set objFSO = CreateObject("Scripting.FileSystemObject")
>>> >
>>> > strResults = "Existing Profiles on student computers"
>>> > For Each strServer In arrServers
>>> > strFolder = "\\" & strServer & "\" & Replace(strStartFolder, ":",
>>> > "$")
>>> > For Each objSubFolder In objFSO.GetFolder(strFolder).SubFolders
>>> > strResults = strResults & VbCrLf & strServer & " - " &
>>> > objSubFolder.Name
>>> > Next
>>> > Next
>>> >
>>> > Set objOutputFile = objFSO.CreateTextFile(strOutputFile, True)
>>> > objOutputFile.Write strResults
>>> > objOutputFile.Close
>>> > Set objOutputFile = Nothing
>>> > Set objFSO = Nothing
>>> >
>>> > MsgBox "Finished. Please see " & strOutputFile
>>> > '=========
>>>
>>> The "net.exe view" command is supposed to give you a list of all
>>> computers
>>> connected to the network. I found it rather temperamental but perhaps
>>> you
>>> can use it to generate a list of PCs.
>>>
>> Great idea Pegasus, thx. I could use something like this to add the
>> computer names to the array,
>>
>> CODE
>> --------------------------------------
>> Const ForReading = 1
>>
>> Set objFSO = CreateObject("Scripting.FileSystemObject")
>> Set objTextFile = objFSO.OpenTextFile _
>> ("c:\computer-names.txt", ForReading)
>>
>> Do Until objTextFile.AtEndOfStream
>> strNextLine = objTextFile.Readline
>> arrServiceList = Split(strNextLine , ",")
>> Loop
>>
>> I'd have to start off with creating the file by invoking a cmd like
>>
>> net view /domain:student>computers.txt
>> and then something to strip out the '\' characters and the rest of the
>> messages echoed back.
>
> That's the general idea - good luck!
When Pegasus refers to the net view command as being temperamental, that
could be because the list comes from the browse master and is not updated
instantaneously as computers shutdown or startup. It can be much more
efficient than pinging a list of all possible computer names because it
retrieves the list from the browse master and does not query the individual
machines. Of course, it can miss some that have just come available and will
include some that have just shutdown. In my experience, the best time to run
a script using this technique is at a time when people are generally all
working, and not starting up or shutting down. 9am and 2:30 pm are best for
us, but ymmv.

Depending on the workstation naming convention, you could do this:

net view /domain | find /i "\\047ds" > computers.txt

Slightly OT, I usually use this in a strictly batch environment, along these
lines:

for /f %%C in ('net view ^| find /i "047ds"') do callrocess %%C
pause & goto:eof
rocess
dir \\%1\c$\documents and settings
goto:eof

which obviates the need for a temporary file.

/Al


My System SpecsSystem Spec