Solved

Shares count. Scan all machines and get the count of shares in each machine.

Posted on 2010-08-30
17
238 Views
Last Modified: 2012-05-10
Hi,

Shares count. Scan all machines and get the count of shares in each machine.
I will have a txt file with machine names. when run has to show results as this

machine name1 : 10
machine name2 : 4
machine name3 : 0

Can anyone help me with a script.

regards
Sharath
0
Comment
Question by:bsharath
  • 7
  • 6
  • 4
17 Comments
 
LVL 17

Expert Comment

by:Tony Massa
Comment Utility
Do you want to count the ADMIN shares?  ADMIN$, IPC$, C$, D$, etc..

If not, you can run this:

Const ForReading = 1, ForWriting = 2, ForAppending = 8

On Error Resume Next
ServerList = "Servers.txt"

Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(ServerList, ForReading, True) Set objResults = fso.CreateTextFile("ServerShares.txt", ForWriting)

Do While f.AtEndOfStream <> True
      strServer = f.ReadLine

      Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strServer & "\root\cimv2")

      Set colShares = objWMIService.ExecQuery("Select * from
Win32_Share")

      If err.Number = 0 Then
            For each objShare in colShares
              x = x + 1
            Next
            objResults.Writeline strComputer & ": " & x
      Else
            objResults.Writeline strComputer & vbTab & err.Number
            err.Clear
      End If
      x = 0
Loop
0
 
LVL 17

Expert Comment

by:Tony Massa
Comment Utility
Sorry, this will include the ADMIN shares in the count.
0
 
LVL 17

Accepted Solution

by:
Tony Massa earned 250 total points
Comment Utility
EE really needs to fix the paste function...here's the script attached...
Shares-Count.vbs.txt
0
 
LVL 11

Author Comment

by:bsharath
Comment Utility
i want to exclude them
0
 
LVL 17

Expert Comment

by:Tony Massa
Comment Utility
I just keep messing this up...first file had strComputer in the output instead of strServer
Shares-Count.vbs.txt
0
 
LVL 17

Expert Comment

by:Tony Massa
Comment Utility
Here you go...just change the WMI query to look for share type of '0'
Shares-Count.vbs.txt
0
 
LVL 11

Author Comment

by:bsharath
Comment Utility
Printers also should be excluded...
0
 
LVL 17

Expert Comment

by:Tony Massa
Comment Utility
This is just folder shares...printers are not included.  Printer Shares are of TYPE 1

So if you wanted to find all printer shares, change the "WHERE Type = '0'  to "WHERE Type = '1'"
0
What Security Threats Are You Missing?

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

 
LVL 11

Author Comment

by:bsharath
Comment Utility
Machines that are off or permission error i get the no as 462 or 70
0
 
LVL 12

Expert Comment

by:Rant32
Comment Utility
That's because of the output in the last Else statement.

Remove line (24) objResults.Writeline strComputer & vbTab & err.Number

For no output on error.
0
 
LVL 17

Expert Comment

by:Tony Massa
Comment Utility
or change the text of the objResults.writeline to strServer & ": ERROR " & err.Number

I like to know if I get errors in most of my scripts.  Just a bad error check message on my part.
0
 
LVL 11

Author Comment

by:bsharath
Comment Utility
Can i have the full code please after the changes
0
 
LVL 12

Expert Comment

by:Rant32
Comment Utility
Computer names/IP address go in Servers.txt
ServerList = "Servers.txt"

arrServers = Split(CreateObject("Scripting.FilesystemObject").OpenTextFile(ServerList).ReadAll, vbNewline)

On Error Resume Next

For Each Server in arrServers
    Err.Clear
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & Server & "\root\cimv2")
    If Err.Number = 0 Then
        WScript.Echo Server & ": " & objWMIService.ExecQuery("SELECT * from Win32_Share WHERE Type = '0'").Count
    End If
Next

Open in new window

0
 
LVL 11

Author Comment

by:bsharath
Comment Utility
Thanks
I want the results into a file in a rwadable format. i get in msg boxes now
0
 
LVL 12

Expert Comment

by:Rant32
Comment Utility
Ah, 'm sorry, forgot to mention. I usually run it from a command prompt with cscript, so:

cscript scanshares.vbs

You can redirect the output to file with:

cscript scanshares.vbs > results.txt

Hope that helps.
0
 
LVL 11

Author Comment

by:bsharath
Comment Utility
Thanks
But can we have it inbuilt so it exports the results when run
0
 
LVL 12

Assisted Solution

by:Rant32
Rant32 earned 250 total points
Comment Utility
Yes, absolutely. This will also work when opening from Explorer. No message boxes.
ServerList = "Servers.txt"

ResultFile = "Results.txt"



Const ForWriting = 2



arrServers = Split(CreateObject("Scripting.FilesystemObject").OpenTextFile(ServerList).ReadAll, vbNewline)



Set oResultfile = CreateObject("Scripting.FilesystemObject").CreateTextFile(ResultFile, ForWriting)



On Error Resume Next



For Each Server in arrServers

    Err.Clear

    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & Server & "\root\cimv2")

    If Err.Number = 0 Then

        oResultfile.WriteLine Server & ": " & objWMIService.ExecQuery("SELECT * from Win32_Share WHERE Type = '0'").Count

    End If

Next

Open in new window

0

Featured Post

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

This article is the result of a quest to better understand Task Scheduler 2.0 and all the newer objects available in vbscript in this version over  the limited options we had scripting in Task Scheduler 1.0.  As I started my journey of knowledge I f…
Use this article to create a batch file to backup a Microsoft SQL Server database to a Windows folder.  The folder can be on the local hard drive or on a network share.  This batch file will query the SQL server to get the current date & time and wi…
This theoretical tutorial explains exceptions, reasons for exceptions, different categories of exception and exception hierarchy.
The viewer will learn how to use the return statement in functions in C++. The video will also teach the user how to pass data to a function and have the function return data back for further processing.

744 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now