"Richard Mueller [MVP]" <rlmueller-> wrote in
message news:...
>
> "Spin" <> wrote in message
> news:...
>> "Jorge Silva" <> wrote in message
>> news:0E2E0AEB-3A25-4CC2-877B-...
>>> Hi
>>> Doing a simple find using ADUC will show you where the server is.
>>> --
>>> I hope that the information above helps you.
>>> Have a Nice day.
>>>
>>> Jorge Silva
>>> MCSE, MVP Directory Services
>>
>> I need a report dumping the OU membership of all servers, in a
>> spreadsheet sorted by server name alphabetically.
>>
>>
>
> I have an example VBScript program to document all servers in the domain
> linked here:
>
> http://www.rlmueller.net/Enumerate%20Servers.htm
>
> The program outputs the Distinguished Name of each machine, which
> indicates the OU/container the computer resides in. If you run the script
> at a command prompt with the cscript host, the output can be redirected to
> a text file.
>
> --
> Richard Mueller
> MVP Directory Services
> Hilltop Lab - http://www.rlmueller.net
> --
>
More code is required to sort the server names and write the output to an
Excel spreadsheet. You can use a disconnected recordset to sort the names.
The following VBScript program worked in my domain (Excel must be installed
on the client where this runs):
==========
Option Explicit
Dim objRootDSE, strDNSDomain, adoConnection, adoCommand, strQuery
Dim adoRecordset, strComputerDN, strOS
Dim adoResults, strOU, strName, intIndex
Dim objExcel, objSheet, intRow, strExcelPath
Const adVarChar = 200
Const MaxCharacters = 255
' Specify spreadsheet.
strExcelPath = "c:\Scripts\Servers.xls"
' Determine DNS domain name from RootDSE object.
Set objRootDSE = GetObject("LDAP://RootDSE")
strDNSDomain = objRootDSE.Get("defaultNamingContext")
' Use ADO to search Active Directory for all computers.
Set adoCommand = CreateObject("ADODB.Command")
Set adoConnection = CreateObject("ADODB.Connection")
adoConnection.Provider = "ADsDSOObject"
adoConnection.Open "Active Directory Provider"
adoCommand.ActiveConnection = adoConnection
strQuery = "<LDAP://" & strDNSDomain _
& ">;(objectCategory=computer);" _
& "sAMAccountName,distinguishedName,operatingSystem; subtree"
adoCommand.CommandText = strQuery
adoCommand.Properties("Page Size") = 100
adoCommand.Properties("Timeout") = 30
adoCommand.Properties("Cache Results") = False
Set adoRecordset = adoCommand.Execute
Set adoResults = CreateObject("ADODB.Recordset")
adoResults.Fields.Append "Name", adVarChar, MaxCharacters
adoResults.Fields.Append "OU", adVarChar, MaxCharacters
adoResults.Open
' Enumerate computer objects with server operating systems.
Do Until adoRecordset.EOF
strOS = adoRecordset.Fields("operatingSystem").Value
If (InStr(UCase(strOS), "SERVER") > 0) Then
strComputerDN = adoRecordset.Fields("distinguishedName").Value
strName = adoRecordset.Fields("sAMAccountName").Value
' Remove trailing "$".
strName = Left(strName, Len(strName) - 1)
intIndex = InStr(LCase(strComputerDN), ",ou=")
If (intIndex = 0) Then
intIndex = InStr(LCase(strComputerDN), ",cn=")
End If
If (intIndex = 0) Then
intIndex = InStr(strComputerDN, ",")
End If
strOU = Mid(strComputerDN, intIndex + 1)
strOU = Left(strOU, InStr(LCase(strOU), ",dc=") - 1)
adoResults.AddNew
adoResults.Fields("Name").Value = strName
adoResults.Fields("OU").Value = strOU
adoResults.Update
End If
adoRecordset.MoveNext
Loop
adoRecordset.Close
adoResults.Sort = "Name"
adoResults.MoveFirst
Set objExcel = CreateObject("Excel.Application")
objExcel.Workbooks.Add
Set objSheet = objExcel.ActiveWorkbook.Worksheets(1)
intRow = 2
objSheet.Cells(1, 1).Value = "Server Name"
objSheet.Cells(1, 2).Value = "OU/Container"
Do Until adoResults.EOF
objSheet.Cells(intRow, 1).Value = adoResults.Fields("Name").Value
objSheet.Cells(intRow, 2).Value = adoResults.Fields("OU").Value
intRow = intRow + 1
adoResults.MoveNext
Loop
adoResults.Close
objExcel.ActiveWorkbook.SaveAs strExcelPath
objExcel.ActiveWorkbook.Close
' Clean up.
objExcel.Application.Quit
adoConnection.Close
Wscript.Echo "Done"
--
Richard Mueller
MVP Directory Services
Hilltop Lab -
http://www.rlmueller.net
--