Solved

script to list all users profiles in computers in the active directory

Posted on 2010-09-03
13
1,228 Views
Last Modified: 2012-05-10
i need to collect this information from my client computers in active directory 2003 for example :

Computer Name           Profile
client1                         user1
                                  user2
                                  user3

-------------------------------

also i need the script to get the computers from a text file.and the output  in .csv file.

Thank You
0
Comment
Question by:lovemask
  • 5
  • 4
  • 4
13 Comments
 

Author Comment

by:lovemask
Comment Utility
if its posible to know each profile size in mb in each computer that will be great.
thanks
0
 
LVL 4

Expert Comment

by:Amnonm
Comment Utility
Here you go just copy to TXT file customize and later save as .VBS


Const adVarChar = 200
Const MaxCharacters = 255
Const ForReading = 1
Const ForWriting = 2
Const ADS_SCOPE_SUBTREE = 2
Const FOR_WRITING = 2

'************************ Create Server List ****************************

set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists("Serverlist.txt") Then
	objFSO.DeleteFile("Serverlist.txt")
End IF
Set objFile = objFSO.CreateTextFile("Serverlist.txt", FOR_WRITING)
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand =   CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"

Set objCOmmand.ActiveConnection = objConnection
Set RootDse = GetObject( "LDAP://RootDse" )
strADSPath = "LDAP://" & RootDse.get( "DefaultNamingContext" )
objCommand.CommandText = _
	    "Select Name, Location from '" & strADSPath &_
		"' Where objectClass='computer'"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst

Do Until objRecordSet.EOF
    objFile.WriteLine objRecordSet.Fields("Name").Value
    objRecordSet.MoveNext
Loop



'***********************  Sort Server List  ******************************

Set DataList = CreateObject("ADOR.Recordset")
DataList.Fields.Append "ComputerName", adVarChar, MaxCharacters
DataList.Open

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("serverlist.txt", ForReading)

Do Until objFile.AtEndOfStream
    strLine = objFile.ReadLine
    DataList.AddNew
    DataList("ComputerName") = strLine
    DataList.Update
Loop

objFile.Close

DataList.Sort = "ComputerName"

DataList.MoveFirst
Do Until DataList.EOF
    strText = strText & DataList.Fields.Item("ComputerName") & vbCrLf
    DataList.MoveNext
Loop

Set objFile = objFSO.OpenTextFile("serverlist.txt", ForWriting)

objFile.WriteLine strText
objFile.Close

Open in new window

0
 
LVL 67

Expert Comment

by:sirbounty
Comment Utility
This should get what you're after...change the first two lines as appropriate for your input/output...
Const ComputerList = "C:\Computers.txt"

Const Output = "C:\Output.csv"

Const hklm=&h80000002



Dim objFSO : Set objFSO = CreateObject("Scripting.FileSystemObject")

Dim objOut : Set objOut = objFSO.CreateTextFile(Output)

Dim objFile : Set objFile = objFSO.OpenTextFile(ComputerList)

arrPCs = Split(objFile.ReadAll, vbNewLine)



For Each pc in arrPCs

  strDefProfile = GetProfilePath (pc)

  wscript.echo pc & vbTab & strDefProfile

  Set objFolder = objFSO.GetFolder ("\\" & pc & "\" & Replace(strDefProfile, ":\", "$\") )

  On Error Resume Next

  For each fld in objFolder.SubFolders

    objOut.Writeline pc & "," & fld & "," & fld.Size

  Next

Next



objOut.Close



Function GetProfilePath (strPC)

  strRegKey =  "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\"

  Dim wmiReg : Set wmiReg =GetObject("winmgmts:\\" & strPC & "\root\default:stdregprov")

  iRet=wmiReg.GetStringValue(hklm, strRegKey, "ProfilesDirectory", strValue)

  If iRet=0 Then

    GetProfilePath = strValue & "\"

  End If

End Function

Open in new window

0
 
LVL 67

Expert Comment

by:sirbounty
Comment Utility
Oops - didn't refresh.  Sorry about that.
And apparently read it a bit differently...
0
 
LVL 4

Expert Comment

by:Amnonm
Comment Utility
I've extracted this script from MS Tech Net you can find more in there
http://technet.microsoft.com/en-us/scriptcenter/default.aspx
0
 
LVL 4

Expert Comment

by:Amnonm
Comment Utility
About the conversion to CSV later you can find it here very short.
http://www.colinwoodhouse.co.uk/txt-csv.htm
0
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!

 

Author Comment

by:lovemask
Comment Utility
i am getting error in line 13 second script :

Set objFolder = objFSO.GetFolder ("\\" & pc & "\" & Replace(strDefProfile, ":\", "$\") )
0
 
LVL 67

Expert Comment

by:sirbounty
Comment Utility
What's the error?  If it's an access denied, you don't have admin permissions...
0
 
LVL 4

Expert Comment

by:Amnonm
Comment Utility
Do you got the error using what script?
0
 

Author Comment

by:lovemask
Comment Utility
the two scripts are working fine. thanks.. but i need 1 thing more which is:

for example if the client is down or unreachable .. i need the script to continue test the next client in the list ... ( On Error Resume next ). also if its possible to get the size of each profile.?


thank you
0
 
LVL 67

Accepted Solution

by:
sirbounty earned 500 total points
Comment Utility
You can just relocate that to the top of the script, and it should work...
It should already get the profile size.
Const ComputerList = "C:\Computers.txt"

Const Output = "C:\Output.csv"

Const hklm=&h80000002



On Error Resume Next



Dim objFSO : Set objFSO = CreateObject("Scripting.FileSystemObject")

Dim objOut : Set objOut = objFSO.CreateTextFile(Output)

Dim objFile : Set objFile = objFSO.OpenTextFile(ComputerList)

arrPCs = Split(objFile.ReadAll, vbNewLine)



For Each pc in arrPCs

  strDefProfile = GetProfilePath (pc)

  wscript.echo pc & vbTab & strDefProfile

  Set objFolder = objFSO.GetFolder ("\\" & pc & "\" & Replace(strDefProfile, ":\", "$\") )

  For each fld in objFolder.SubFolders

    objOut.Writeline pc & "," & fld & "," & fld.Size

  Next

Next



objOut.Close



Function GetProfilePath (strPC)

  strRegKey =  "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\"

  Dim wmiReg : Set wmiReg =GetObject("winmgmts:\\" & strPC & "\root\default:stdregprov")

  iRet=wmiReg.GetStringValue(hklm, strRegKey, "ProfilesDirectory", strValue)

  If iRet=0 Then

    GetProfilePath = strValue & "\"

  End If

End Function

Open in new window

0
 

Author Comment

by:lovemask
Comment Utility
thank you.. its perfect
0
 
LVL 67

Expert Comment

by:sirbounty
Comment Utility
Happy to have helped - thanks for the grade. :^)
0

Featured Post

Do You Know the 4 Main Threat Actor Types?

Do you know the main threat actor types? Most attackers fall into one of four categories, each with their own favored tactics, techniques, and procedures.

Join & Write a Comment

Introduction During my participation as a VBScript contributor at Experts Exchange, one of the most common questions I come across is this: "I have a script that runs against only one computer. How can I make it run against a list of computers in …
ADCs have gained traction within the last decade, largely due to increased demand for legacy load balancing appliances to handle more advanced application delivery requirements and improve application performance.
This video discusses moving either the default database or any database to a new volume.
This video gives you a great overview about bandwidth monitoring with SNMP and WMI with our network monitoring solution PRTG Network Monitor (https://www.paessler.com/prtg). If you're looking for how to monitor bandwidth using netflow or packet s…

771 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

14 Experts available now in Live!

Get 1:1 Help Now