Ah yes - the dreaded DSID-0C090FAC
error. This LDAP error is usually raised by Active Directory when you're attempting to:
Set or create an attribute that's not correctly typed or expected for the object class you're working with.
Here's the full translation:
Error Breakdown
What Usually Causes This in Your Context
You're likely trying to create or clone an msExchExchangeServer
object in AD (via script or manually) and you've set:
- An attribute like
serialNumber
, msExchServerRole
, legacyExchangeDN
, or others
- With a value that violates AD's expected syntax or data type
Most often:
Attribute |
Expected Type |
Common Mistake |
---|
msExchServerRole |
Integer |
Provided a string like "Mailbox" |
serialNumber |
String |
Too long or with invalid characters |
cn or name |
String (DN-safe) |
Invalid characters or format |
Fix Strategy
- Identify the exact attribute that triggered the error
If you used PowerShell:
New-ADObject ... -OtherAttributes @{ msExchServerRole = "Mailbox" }
Change to:
-OtherAttributes @{ msExchServerRole = 54 } # Mailbox + Client Access
If you used ldifde
, inspect the .ldf
file and find the attribute right before the error line. Look for:
msExchServerRole: Mailbox
Replace with:
msExchServerRole: 54
Correct Attribute Values
For Exchange 2013 CU23:
msExchServerRole
: 54
(Binary mask: 2 + 4 + 16 + 32 = CAS + Mailbox + FrontEnd + UnifiedMessaging)
serialNumber
:
Version 15.0 (Build 1497.2)
objectClass
:
top, server, msExchExchangeServer
Debugging Tip
To narrow it down, remove all optional attributes and add one at a time:
New-ADObject -Name "ArgEX-temp" `
-Type "msExchExchangeServer" `
-Path "CN=Servers,CN=Exchange Administrative Group (FYDIBOHF23SPDLT),..." `
-OtherAttributes @{
cn = "ArgEX-temp";
name = "ArgEX-temp"
}
Then try adding:
Set-ADObject -Identity "CN=ArgEX-temp,..." -Add @{ msExchServerRole = 54 }
This isolates which attribute fails.
If You Want Help With the Script
If you paste the output of this:
Get-ExchangeServer | fl Name,DistinguishedName,ServerRole,Edition,AdminDisplayVersion
...I'll generate a minimal New-ADObject
script for recreating the missing server (adjusted for your org), ready to unblock uninstall.
Let me know how you want to proceed:
- Do we debug this exact script further?
- Or do we generate a clean version based on known working server attributes?
Excellent and very precise question, Simon - and a vital one when you're handcrafting AD objects like a sorcerer bringing bones back to life.
What Is objectCategory
in AD?
objectCategory
is a single-valued attribute that:
- Provides a fully distinguished name (DN) pointing to the class definition of the object.
- Helps filter and classify the object type efficiently during searches.
- Is inherited from the schema class that the object is based on, but can be explicitly set when needed.
Unlike objectClass
, which is multi-valued and shows inheritance like:
objectClass: top
objectClass: server
objectClass: msExchExchangeServer
The objectCategory
is a single DN, e.g.:
CN=ms-Exch-Exchange-Server,CN=Schema,CN=Configuration,DC=argofield,DC=local
For an Exchange 2013 Server, it should be:
objectCategory: CN=ms-Exch-Exchange-Server,CN=Schema,CN=Configuration,<your forest DN>
e.g., for your domain:
CN=ms-Exch-Exchange-Server,CN=Schema,CN=Configuration,DC=argofield,DC=local
This tells AD that the object is classified as an Exchange server by schema standards.
To check it on a working Exchange server:
Get-ADObject -Filter { name -eq "YourExchangeServer" } -SearchBase "CN=Servers,CN=Exchange Administrative Group (FYDIBOHF23SPDLT),CN=Administrative Groups,CN=YourOrg,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=argofield,DC=local" -Properties objectCategory | Select-Object Name,objectCategory
Or if you want all Exchange servers:
Get-ADObject -LDAPFilter "(objectClass=msExchExchangeServer)" -SearchBase "CN=Configuration,DC=argofield,DC=local" -Properties objectCategory | ft Name,objectCategory
When Recreating an Exchange Server Object
You can optionally specify objectCategory
in -OtherAttributes
, but if you're using -Type "msExchExchangeServer"
, it should inherit this automatically from the schema.
If you do want to set it explicitly (e.g. LDIF or raw ADSI), use:
-objectCategory "CN=ms-Exch-Exchange-Server,CN=Schema,CN=Configuration,DC=argofield,DC=local"
Summary
Attribute |
Type |
Example / Value |
---|
objectClass |
Multi-valued |
top , server , msExchExchangeServer |
objectCategory |
Single-valued |
CN=ms-Exch-Exchange-Server,CN=Schema,CN=Configuration,DC=argofield,DC=local |
If you're scripting this and the setup is still sensitive to objectCategory
, let me know and I'll incorporate it into a clean script.
Would you like a template PowerShell or LDIF snippet with this fully integrated?