Const ADS_SCOPE_SUBTREE = 2
' Trust Type - http://msdn.microsoft.com/en-us/library/cc223771(PROT.10).aspx
Dim objTrustTypes : Set objTrustTypes = CreateObject("Scripting.Dictionary")
objTrustTypes.Add 4, "DCE"
objTrustTypes.Add 3, "MIT"
objTrustTypes.Add 2, "UpLevel"
objTrustTypes.Add 1, "DownLevel"
' Trust Attributes - http://msdn.microsoft.com/en-us/library/cc223779(PROT.10).aspx
Dim objTrustAttributes : Set objTrustAttributes = CreateObject("Scripting.Dictionary")
objTrustAttributes.Add 128, "UsesRC4Encryption"
objTrustAttributes.Add 64, "TreatAsExternal"
objTrustAttributes.Add 32, "WithinForest"
objTrustAttributes.Add 16, "CrossOrganisation"
objTrustAttributes.Add 8, "ForestTransitive"
objTrustAttributes.Add 4, "QuarantinedDomain"
objTrustAttributes.Add 2, "UpLevelOnly"
objTrustAttributes.Add 1, "NonTransitive"
' Trust Direction - http://msdn.microsoft.com/en-us/library/cc223768(PROT.10).aspx
Dim objTrustDirection : Set objTrustDirection = CreateObject("Scripting.Dictionary")
objTrustDirection.Add 3, "BiDirectional"
objTrustDirection.Add 2, "Outbound"
objTrustDirection.Add 1, "Inbound"
objTrustDirection.Add 0, "Disabled"
Dim objConnection : Set objConnection = CreateObject("ADODB.Connection")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Dim objCommand : Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection
Dim objRootDSE : Set objRootDSE = GetObject("LDAP://RootDSE")
objCommand.CommandText = "SELECT distinguishedName, name, trustType, trustAttributes, trustDirection, " & _
"trustPartner, whenCreated FROM 'GC://" & objRootDSE.Get("rootDomainNamingContext") & _
"' WHERE objectClass='trustedDomain'"
Set objRootDSE = Nothing
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Timeout") = 600
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
objCommand.Properties("Cache Results") = False
Dim objRecordSet : Set objRecordSet = objCommand.Execute
While Not objRecordSet.EOF
WScript.Echo "Trusted Domain: " & objRecordSet.Fields("name").Value
WScript.Echo "Trust Type: " & objTrustTypes(objRecordSet.Fields("trustType").Value)
Dim dblFlag
Dim strFlags : strFlags = ""
For Each dblFlag in objTrustAttributes
If objRecordSet.Fields("trustAttributes").Value And dblFlag Then
strFlags = strFlags & objTrustAttributes(dblFlag) & " "
End If
Next
WScript.Echo "Trust Attributes: " & strFlags
WScript.Echo "Trust Direction: " & objTrustTypes(objRecordSet.Fields("trustDirection").Value)
WScript.Echo "Trust Partner: " & objRecordSet.Fields("trustPartner").Value
WScript.Echo "Distinguished Name: " & objRecordSet.Fields("distinguishedName").Value
WScript.Echo "Created: " & objRecordSet.Fields("whenCreated").Value
objRecordSet.MoveNext
Wend
objConnection.Close
Set objRecordSet = Nothing
Set objCommand = Nothing
Set objConnection = Nothing
Const ADS_SCOPE_SUBTREE = 2
' Trust Type - http://msdn.microsoft.com/en-us/library/cc223771(PROT.10).aspx
Dim objTrustTypes : Set objTrustTypes = CreateObject("Scripting.Dictionary")
objTrustTypes.Add 4, "DCE"
objTrustTypes.Add 3, "MIT"
objTrustTypes.Add 2, "UpLevel"
objTrustTypes.Add 1, "DownLevel"
' Trust Attributes - http://msdn.microsoft.com/en-us/library/cc223779(PROT.10).aspx
Dim objTrustAttributes : Set objTrustAttributes = CreateObject("Scripting.Dictionary")
objTrustAttributes.Add 128, "UsesRC4Encryption"
objTrustAttributes.Add 64, "TreatAsExternal"
objTrustAttributes.Add 32, "WithinForest"
objTrustAttributes.Add 16, "CrossOrganisation"
objTrustAttributes.Add 8, "ForestTransitive"
objTrustAttributes.Add 4, "QuarantinedDomain"
objTrustAttributes.Add 2, "UpLevelOnly"
objTrustAttributes.Add 1, "NonTransitive"
' Trust Direction - http://msdn.microsoft.com/en-us/library/cc223768(PROT.10).aspx
Dim objTrustDirection : Set objTrustDirection = CreateObject("Scripting.Dictionary")
objTrustDirection.Add 3, "BiDirectional"
objTrustDirection.Add 2, "Outbound"
objTrustDirection.Add 1, "Inbound"
objTrustDirection.Add 0, "Disabled"
Dim objConnection : Set objConnection = CreateObject("ADODB.Connection")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Dim objCommand : Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection
Dim objRootDSE : Set objRootDSE = GetObject("LDAP://RootDSE")
objCommand.CommandText = "SELECT distinguishedName, name, trustType, trustAttributes, trustDirection, " & _
"trustPartner, whenCreated FROM 'GC://" & objRootDSE.Get("rootDomainNamingContext") & _
"' WHERE objectClass='trustedDomain'"
Set objRootDSE = Nothing
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Timeout") = 600
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
objCommand.Properties("Cache Results") = False
Dim objRecordSet : Set objRecordSet = objCommand.Execute
While Not objRecordSet.EOF
WScript.Echo "Trusted Domain: " & objRecordSet.Fields("name").Value
WScript.Echo "Trust Type: " & objTrustTypes(objRecordSet.Fields("trustType").Value)
Dim dblFlag
Dim strFlags : strFlags = ""
For Each dblFlag in objTrustAttributes
If objRecordSet.Fields("trustAttributes").Value And dblFlag Then
strFlags = strFlags & objTrustAttributes(dblFlag) & " "
End If
Next
WScript.Echo "Trust Attributes: " & strFlags
WScript.Echo "Trust Direction: " & objTrustDirection(objRecordSet.Fields("trustDirection").Value)
WScript.Echo "Trust Partner: " & objRecordSet.Fields("trustPartner").Value
WScript.Echo "Distinguished Name: " & objRecordSet.Fields("distinguishedName").Value
WScript.Echo "Created: " & objRecordSet.Fields("whenCreated").Value
objRecordSet.MoveNext
Wend
objConnection.Close
Set objRecordSet = Nothing
Set objCommand = Nothing
Set objConnection = Nothing
You can only prevent it if you remove Domain Admin rights from the administrators of the child domain. I bet that would be popular ;)
However, you can always monitor the trust configuration, and potentially have a script alert you should it change. I'll knock something together to do that.
Chris