KurtHoffeditz
asked on
Script Question - Locate New Servers
When I run the script below, I get " Incorrect scope argument. Use either 'subtree' or 'onelevel' "
This is how I'm running it:
C:\>cscript get_servers.vbs /date:01/01/11 /email:saclayton@jlg.com /base:"OU=Corp_Servers,DC= corp,DC=co m"/scope=s ubtree
Microsoft (R) Windows Script Host Version 5.7
Copyright (C) Microsoft Corporation. All rights reserved.
Incorrect scope argument. Use either 'subtree' or 'onelevel'
C:\>
What am I doing wrong?
---------------------This is the script-------------------- ---------- ---------- ---------- --------
Set oRootDSE = GetObject("LDAP://RootDSE" )
strFilter = "(&(objectclass=computer)) ;"
strAttrs = "distinguishedName;"
strScope = WScript.Arguments.Named("s cope")
strBaseArg = WScript.Arguments.Named("b ase")
datCutOff = WScript.Arguments.Named("d ate")
strEmailTo = WScript.Arguments.Named("e mail")
'YOU'LL NEED TO EDIT THESE YOURSELF!!!
strSMTPServer = "mail.yourcompany.com"
intSMTPPort = 25
strEmailFrom = "you@yourcompany.com"
If Not(UCase(strScope) = "SUBTREE" Or UCase(strScope) = "ONELEVEL") Then
WScript.Echo "Incorrect scope argument. Use either 'subtree' or 'onelevel'"
WScript.Quit
End If
If strBaseArg <> "" Then
If UCase(strBaseArg) = "ROOT" Then strBase ="<LDAP://" & oRootDSE.get("defaultNamin gContext") _
& ">;" Else strBase = "<LDAP://" & strBaseArg & ">;"
WScript.Echo strBase
Else
WScript.Echo "No search base given. Please specify a search base"
WScript.Quit
End If
If datCutOff = "" Then
WScript.Echo "No date given. Please specify a search base"
WScript.Quit
End if
Set objConn = CreateObject("ADODB.Connec tion")
objConn.Provider = "ADsDSOObject"
objConn.Open "Active Directory Provider"
On Error Resume Next
Set objRS = objConn.Execute(strBase & strFilter & strAttrs & strScope)
If Err.Number <> 0 Then
WScript.Echo "Error performing query: " & Err.Number & " - " & Err.Description
Else
On Error Goto 0
If objRs.RecordCount > 0 Then
objRS.MoveFirst
strEmailBody = "<font face='Verdana' size='1'><b>Report of servers created on or after " & datCutOff & "...<br>"
strEmailBody = strEmailBody & "Searching: " & Replace(Replace(strBase,"< ",""),">", "") & " (" & strScope & ")</b><br><br>"
While Not objRS.EOF
Set objPC = GetObject("LDAP://" & Replace(objRS.Fields(0).Va lue,"/","\ /"))
strWhenCreated = objPC.whenCreated
If InStr(UCase(objPC.operatin gSystem)," SERVER") > 0 Then
If DateValue(strWhenCreated) > DateValue(datCutOff) Then
WScript.Echo objPC.distinguishedName
WScript.Echo "This server was created on : " & strWhenCreated
WScript.Echo ""
strEmailBody = strEmailBody & objPC.distinguishedName & "<br>" & "This server was created on : " & strWhenCreated & "<br><br>"
End If
End If
objRS.MoveNext
Wend
strEmailBody = strEmailBody & "</font>"
Set objPC = Nothing
'SEND THE EMAIL....
If strEmailTo <> "" Then
WScript.Echo "Sending email to " & strEmailTo & "....."
On Error Resume Next
Set objMail = CreateObject("CDO.Message" )
objMail.Subject = "Server Creation Report"
objMail.From = strEmailFrom
objMail.To = strEmailTo
objMail.HTMLBody = strEmailBody
objMail.Configuration.Fiel ds.Item("http://schemas.microsoft.com/cdo/configuration/sendusing" ) = 2
objMail.Configuration.Fiel ds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver" ) = strSMTPServer
objMail.Configuration.Fiel ds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport" ) = intSMTPPort
objMail.Configuration.Fiel ds.Update
objMail.Send
If Err.Number = 0 Then
WScript.Echo "Email Sent. Script Finished"
Else
WScript.Echo "Error sending email: " & Err.Number & " - " & Err.Description
End if
Set objMail = Nothing
End If
Else
WScript.Echo "No servers found for this search criteria"
End If
End If
Set oRootDSE = Nothing
Set objConn = Nothing
This is how I'm running it:
C:\>cscript get_servers.vbs /date:01/01/11 /email:saclayton@jlg.com /base:"OU=Corp_Servers,DC=
Microsoft (R) Windows Script Host Version 5.7
Copyright (C) Microsoft Corporation. All rights reserved.
Incorrect scope argument. Use either 'subtree' or 'onelevel'
C:\>
What am I doing wrong?
---------------------This is the script--------------------
Set oRootDSE = GetObject("LDAP://RootDSE"
strFilter = "(&(objectclass=computer))
strAttrs = "distinguishedName;"
strScope = WScript.Arguments.Named("s
strBaseArg = WScript.Arguments.Named("b
datCutOff = WScript.Arguments.Named("d
strEmailTo = WScript.Arguments.Named("e
'YOU'LL NEED TO EDIT THESE YOURSELF!!!
strSMTPServer = "mail.yourcompany.com"
intSMTPPort = 25
strEmailFrom = "you@yourcompany.com"
If Not(UCase(strScope) = "SUBTREE" Or UCase(strScope) = "ONELEVEL") Then
WScript.Echo "Incorrect scope argument. Use either 'subtree' or 'onelevel'"
WScript.Quit
End If
If strBaseArg <> "" Then
If UCase(strBaseArg) = "ROOT" Then strBase ="<LDAP://" & oRootDSE.get("defaultNamin
& ">;" Else strBase = "<LDAP://" & strBaseArg & ">;"
WScript.Echo strBase
Else
WScript.Echo "No search base given. Please specify a search base"
WScript.Quit
End If
If datCutOff = "" Then
WScript.Echo "No date given. Please specify a search base"
WScript.Quit
End if
Set objConn = CreateObject("ADODB.Connec
objConn.Provider = "ADsDSOObject"
objConn.Open "Active Directory Provider"
On Error Resume Next
Set objRS = objConn.Execute(strBase & strFilter & strAttrs & strScope)
If Err.Number <> 0 Then
WScript.Echo "Error performing query: " & Err.Number & " - " & Err.Description
Else
On Error Goto 0
If objRs.RecordCount > 0 Then
objRS.MoveFirst
strEmailBody = "<font face='Verdana' size='1'><b>Report of servers created on or after " & datCutOff & "...<br>"
strEmailBody = strEmailBody & "Searching: " & Replace(Replace(strBase,"<
While Not objRS.EOF
Set objPC = GetObject("LDAP://" & Replace(objRS.Fields(0).Va
strWhenCreated = objPC.whenCreated
If InStr(UCase(objPC.operatin
If DateValue(strWhenCreated) > DateValue(datCutOff) Then
WScript.Echo objPC.distinguishedName
WScript.Echo "This server was created on : " & strWhenCreated
WScript.Echo ""
strEmailBody = strEmailBody & objPC.distinguishedName & "<br>" & "This server was created on : " & strWhenCreated & "<br><br>"
End If
End If
objRS.MoveNext
Wend
strEmailBody = strEmailBody & "</font>"
Set objPC = Nothing
'SEND THE EMAIL....
If strEmailTo <> "" Then
WScript.Echo "Sending email to " & strEmailTo & "....."
On Error Resume Next
Set objMail = CreateObject("CDO.Message"
objMail.Subject = "Server Creation Report"
objMail.From = strEmailFrom
objMail.To = strEmailTo
objMail.HTMLBody = strEmailBody
objMail.Configuration.Fiel
objMail.Configuration.Fiel
objMail.Configuration.Fiel
objMail.Configuration.Fiel
objMail.Send
If Err.Number = 0 Then
WScript.Echo "Email Sent. Script Finished"
Else
WScript.Echo "Error sending email: " & Err.Number & " - " & Err.Description
End if
Set objMail = Nothing
End If
Else
WScript.Echo "No servers found for this search criteria"
End If
End If
Set oRootDSE = Nothing
Set objConn = Nothing
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
This question has been classified as abandoned and is closed as part of the Cleanup Program. See the recommendation for more details.