Public/get-AllegisADUserSchema.ps1
function get-AllegisADUserSchema(){ $ADUser = Get-ADUser -ResultSetSize 1 -filter * -Properties objectClass Function Get-RelatedClass { param( [string]$ClassName ) $Classes = @($ClassName) $SubClass = Get-ADObject -SearchBase "$((Get-ADRootDSE).SchemaNamingContext)" -Filter {lDAPDisplayName -eq $ClassName} -properties subClassOf |Select-Object -ExpandProperty subClassOf if( $Subclass -and $SubClass -ne $ClassName ) { $Classes += Get-RelatedClass $SubClass } $auxiliaryClasses = Get-ADObject -SearchBase "$((Get-ADRootDSE).SchemaNamingContext)" -Filter {lDAPDisplayName -eq $ClassName} -properties auxiliaryClass | Select-Object -ExpandProperty auxiliaryClass foreach( $auxiliaryClass in $auxiliaryClasses ) { $Classes += Get-RelatedClass $auxiliaryClass } $sysauxiliaryClasses = Get-ADObject -SearchBase "$((Get-ADRootDSE).SchemaNamingContext)" -Filter {lDAPDisplayName -eq $ClassName} -properties systemAuxiliaryClass | Select-Object -ExpandProperty systemAuxiliaryClass foreach( $sysauxiliaryClass in $sysauxiliaryClasses ) { $Classes += Get-RelatedClass $sysauxiliaryClass } Return $Classes } $AllClasses = ( Get-RelatedClass $ADUser.ObjectClass | sort -Unique ) $AllAttributes = @() Foreach( $Class in $AllClasses ) { $attributeTypes = 'MayContain','MustContain','systemMayContain','systemMustContain' $ClassInfo = Get-ADObject -SearchBase "$((Get-ADRootDSE).SchemaNamingContext)" -Filter {lDAPDisplayName -eq $Class} -properties $attributeTypes ForEach ($attribute in $attributeTypes) { $AllAttributes += $ClassInfo.$attribute } } $AllAttributes = ( $AllAttributes | sort -Unique ) $AttributesOfInterest = @() Foreach( $Attribute in $AllAttributes ) { $AttributeInfo = Get-ADObject -SearchBase "$((Get-ADRootDSE).SchemaNamingContext)" -Filter {lDAPDisplayName -eq $Attribute} -properties * #if ($AttributeInfo.lDAPDisplayName -eq 'msDS-UserPasswordExpiryTimeComputed'){break} $AttributeInfo | Add-Member -NotePropertyName SystemFlags-NotReplicated -NotePropertyValue (($AttributeInfo.systemFlags -band '1') -ne 0) -Force $AttributeInfo | Add-Member -NotePropertyName SystemFlags-globalCatalog -NotePropertyValue (($AttributeInfo.systemFlags -band '2') -ne 0) -Force $AttributeInfo | Add-Member -NotePropertyName SystemFlags-Constructed -NotePropertyValue (($AttributeInfo.systemFlags -band '4') -ne 0) -Force $AttributeInfo | Add-Member -NotePropertyName SystemFlags-System -NotePropertyValue (($AttributeInfo.systemFlags -band '16') -ne 0) -Force $AttributeInfo | Add-Member -NotePropertyName SystemFlags-deleteimmediately -NotePropertyValue (($AttributeInfo.systemFlags -band '33554432') -ne 0) -Force $AttributeInfo | Add-Member -NotePropertyName SystemFlags-NotMoveable -NotePropertyValue (($AttributeInfo.systemFlags -band '67108864') -ne 0) -Force $AttributeInfo | Add-Member -NotePropertyName SystemFlags-NotRenameable -NotePropertyValue (($AttributeInfo.systemFlags -band '134217728') -ne 0) -Force $attributeType=$null switch ($AttributeInfo.attributeSyntax){ 2.5.5.1{$IDNAttributeType='string';$ADattributeType='Distinguished Name'} 2.5.5.2{$IDNAttributeType='string';$ADattributeType='Object ID'} 2.5.5.3{$IDNAttributeType=$null;$ADattributeType='Case-sensitive string'} 2.5.5.4{$IDNAttributeType='string';$ADattributeType='Case-insensitive string'} 2.5.5.5{$IDNAttributeType='string';$ADattributeType='Print case string'} 2.5.5.6{$IDNAttributeType='string';$ADattributeType='Numeric string'} 2.5.5.7{$IDNAttributeType=$null;$ADattributeType='OR name-X400'} 2.5.5.8{$IDNAttributeType='boolean';$ADattributeType='Boolean'} 2.5.5.9{$IDNAttributeType='int';$ADattributeType='integer'} 2.5.5.10{$IDNAttributeType='string';$ADattributeType='Octet string'} 2.5.5.11{$IDNAttributeType='string';$ADattributeType='Time'} 2.5.5.12{$IDNAttributeType='string';$ADattributeType='Unicode'} 2.5.5.13{$IDNAttributeType=$null;$ADattributeType='Address'} 2.5.5.14{$IDNAttributeType=$null;$ADattributeType='Distname-Address'} 2.5.5.15{$IDNAttributeType=$null;$ADattributeType='NT Security Descriptor'} 2.5.5.16{$IDNAttributeType='long';$ADattributeType='Large integer'} 2.5.5.17{$IDNAttributeType='string';$ADattributeType='SID'} } $AttributeInfo | Add-Member -NotePropertyName ADAttributeType -NotePropertyValue $adattributeType -Force $AttributeInfo | Add-Member -NotePropertyName type -NotePropertyValue $IDNAttributeType -Force $AttributeInfo | Add-Member -NotePropertyName multi -NotePropertyValue (-not $AttributeInfo.isSingleValued) -Force #$AttributeInfo | Add-Member -NotePropertyName IDN -NotePropertyValue $false -Force #$AttributeInfo | Add-Member -NotePropertyName SystemFlags-NotDeleteable -NotePropertyValue (($AttributeInfo.systemFlags -band '2147483648') -ne 0) -Force $AttributesOfInterest+=$AttributeInfo } $AttributesOfInterest = $AttributesOfInterest | sort ldapDisplayName -Unique return $AttributesOfInterest | sort ldapDisplayName #| select ldapDisplayName,ADAttributeType,type,multi,attributeSyntax,isSingleValued,attributeId,linkId,Name,systemFlags,SystemFlags-NotReplicated,SystemFlags-globalCatalog,SystemFlags-Constructed,SystemFlags-System,SystemFlags-NotRenameable,whenCreated,adminDisplayName,adminDescription } |