ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

Server 2012 AD Schema扩展实战:OID注册、属性挂载与权限委派

Server 2012 AD Schema扩展实战:OID注册、属性挂载与权限委派 1. 为什么在 Server 2012 AD 里加个字段比在 Excel 里多填一列还让人头疼“AD 自定义属性”这六个字听起来像给 Active Directory 换个皮肤——改个显示名、调个颜色、加个图标。但真动手时你会发现它不是 UI 层的美化而是底层 Schema 的外科手术。我第一次接到这个需求时客户只说了一句“我们要在用户对象上存一个‘工号有效期’字段HR 系统能读能写。”语气轻松得像让我顺手关下办公室的灯。结果三天后我在域控制器上反复回滚 Schema 修改、重装 AD LDS 实例、排查 FSMO 角色同步失败才真正理解——Server 2012 的 AD Schema 不是数据库表结构而是一套受严格保护的元数据契约每一次新增属性都是在修改整个域的信任根基。这不是功能缺失而是设计哲学的体现微软把 Schema 变更设为“高危操作”默认关闭所有非管理员访问强制要求你必须先理解三个硬性前提——Schema 主机必须在线且可写、FSMO 角色持有者必须唯一、所有域控制器必须完成复制窗口内的同步确认。这些条件在测试环境里可能自动满足但在生产环境里一个延迟超过 15 分钟的 GC全局编录同步就能让新属性在部分 OU 下完全不可见。更麻烦的是Server 2012 的 Schema 编辑器ldp.exe 或 ADSI Edit不提供字段类型校验、不提示依赖冲突、不记录变更回滚点——它只给你一个 raw LDAP 编辑框和一句冷冰冰的“Operation failed”。所以这篇内容不讲“怎么点几下鼠标加字段”而是还原一个真实场景某公司升级 HR 系统后需将员工合同到期日同步至 AD并由组策略自动禁用过期账户。我们用 Server 2012 R2 标准版搭建了单域环境域功能级别为 Windows Server 2012林功能级别同为 2012。全文所有步骤、参数、报错代码、修复路径均来自该环境下的实操验证。你看到的不是理论推演而是我在域控制器控制台前敲下的每一行命令、截图的每一个错误弹窗、以及重启服务后盯着事件查看器等来的那条绿色成功日志。核心关键词已自然嵌入Active Directory Schema 扩展、LDAP 属性定义、Object IdentifierOID注册、Schema Master 角色、ADSI Edit 工具、自定义属性同步延迟、属性权限委派、PowerShell Get-ADUser 过滤。后续所有技术展开都将围绕这八个词的真实落地展开——它们不是术语堆砌而是你在执行过程中必然撞上的八道门。2. Schema 扩展前必须签下的“生死状”三道不可绕过的硬性检查在 Server 2012 中添加自定义属性第一步永远不是打开 ADSI Edit而是做一次彻底的“域健康扫描”。很多故障不是出在编辑过程而是源于前置条件的松动。我见过太多案例管理员在 Schema Master 上成功添加了属性却在另一台 DC 上执行Get-ADUser -Filter * -Properties *时根本看不到该字段——查到最后发现是林范围的 Schema Master 角色被意外转移而新持有者尚未完成初始同步。这种问题无法通过重试解决必须从根因重建信任链。2.1 确认 Schema Master 角色持有者并验证其可写状态首先必须精确定位当前 Schema Master。不能靠“我记得上次是哪台”也不能信 DNS 解析缓存。执行以下 PowerShell 命令需以 Enterprise Admin 身份运行# 获取林范围 FSMO 角色信息 Get-ADForest | Select-Object SchemaMaster, DomainNamingMaster, InfrastructureMaster, RidMaster, PdcEmulator # 验证 Schema Master 是否响应且可写替换为实际主机名 $sm dc01.contoso.local Test-NetConnection -ComputerName $sm -Port 389 repadmin /showrepl $sm提示repadmin /showrepl输出中关键看Last Result列是否为0成功以及Last Sync Attempt时间是否在 5 分钟内。若出现8452拒绝访问或8463超时说明该 DC 与 Schema Master 之间存在网络或防火墙阻断必须先解决通信问题否则任何 Schema 修改都会失败。2.2 检查林功能级别与域功能级别是否匹配Server 2012 的 Schema 扩展对功能级别有隐式依赖。虽然文档未明说但实测发现当林功能级别为 2008 R2而域功能级别为 2012 时某些 OID 注册会触发0x2098错误Schema 更新被拒绝。执行以下命令确认# 获取林功能级别 (Get-ADForest).ForestMode # 获取域功能级别 (Get-ADDomain).DomainMode合法组合仅限以下三种Windows2008R2ForestWindows2008R2DomainWindows2012ForestWindows2012DomainWindows2012R2ForestWindows2012R2Domain若不匹配例如林为 2008 R2域为 2012必须先升级林功能级别。注意此操作不可逆且要求所有 DC 至少为 Server 2008 R2 SP1。升级命令为Set-ADForestMode -Identity contoso.local -ForestMode Windows2012Forest -Confirm:$false注意升级过程需等待所有 DC 完成 Schema 复制通常 15–30 分钟期间禁止任何 Schema 修改。我曾因跳过此步在升级中途强行添加属性导致 Schema Master 进入“只读锁定”状态最终需从备份恢复系统状态。2.3 验证 Schema 命名上下文Schema NC的完整性Schema NC 是存储所有类与属性定义的特殊目录分区。它的损坏不会导致域瘫痪但会让所有 Schema 操作静默失败。使用ldp.exe进行深度验证运行ldp.exe→ Connect → 输入 Schema Master 主机名与端口 389 → Bind使用 Enterprise Admin 账户Browse → Search → BaseDN 输入CNSchema,CNConfiguration,DCcontoso,DClocalFilter 输入(objectClass*)Scope 选One Level点击 Run观察返回条目数。正常值应在1700–1900 条之间Server 2012 R2 默认 Schema 对象数为 1842。若远低于此如 1500说明 Schema NC 损坏需从最近一次系统状态备份中恢复ntds.dit文件。实操心得我习惯在每次重大 Schema 操作前用ldp.exe导出 Schema NC 的完整快照Search → Options → Export to File。文件体积约 2–3MB但它是你回滚时最可靠的依据——比 ADRecycleBin 更底层比系统还原点更精准。这三步检查耗时约 8–12 分钟但它能帮你避开 70% 以上的 Schema 扩展失败。真正的“加字段”操作本身只需 2 分钟而修复因前置条件缺失导致的故障平均需要 3 小时以上。在 Server 2012 的世界里准备时间永远大于执行时间——这是微软用无数企业踩坑史写就的铁律。3. 从零生成一个合规 OID不是随便拼个数字而是申请一张“身份证”在 Server 2012 AD 中每个自定义属性必须绑定一个全球唯一的 Object IdentifierOID。它不像 UUID 那样可随机生成而是一串遵循 ITU-T X.660 标准的分层编号形如1.2.840.113556.1.8000.2554.12345.67890。很多人图省事直接用在线 OID 生成器随便拿一个结果在后续组策略或第三方应用集成时爆0x80072030无效 OID 格式错误。根源在于Server 2012 的 Schema 验证器会校验 OID 的“根节点”是否属于微软预留段而非简单检查长度或分隔符。3.1 为什么不能用公共 OID 生成器微软为 Active Directory 预留了专属 OID 根节点1.2.840.113556.1.8000.2554。这是微软在 IANA互联网号码分配局注册的私有企业编号Private Enterprise Number, PEN所有 AD 内部属性如userAccountControl、msDS-UserPasswordExpiryTimeComputed都以此开头。如果你用通用生成器得到2.999.1.2.3.4.5Schema 编辑器虽允许你输入但当你尝试将该属性附加到user类时会立即报错Error 0x208D: The specified attribute is not valid for this class.因为 Schema 引擎在加载类定义时会预加载所有微软根 OID 下的属性索引表非此根下的 OID会被视为“未知外部扩展”默认禁止关联到核心系统类。3.2 正确生成 OID 的两种实战路径路径一基于微软根 OID 手动构造推荐用于内部项目规则如下固定前缀1.2.840.113556.1.8000.2554第 8 段你的组织标识建议用 5 位数字如12345避免与现有 Microsoft 子段冲突第 9 段属性序列号从1开始递增每新增一个属性 1示例1.2.840.113556.1.8000.2554.12345.1表示“某公司第 1 个自定义属性”。提示第 8 段的 5 位数字无需向 IANA 申请它是微软授权给 AD 管理员的“子命名空间”。只要保证在同一林内不重复即可。我习惯用公司域名缩写转数字如contoso→26686并建立一个本地 Excel 表跟踪已用 OID避免跨项目冲突。路径二使用 Microsoft 提供的 OID 注册工具适用于需对外发布 Schema微软官方提供oidgen.exe工具包含在 Windows SDK 中它会生成符合规范的 OID并写入注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\OID\EncodingType 0。执行后注册表中会新增键值[...]\1.2.840.113556.1.8000.2554.65535.1 Contoso Custom Schema Extension该 OID 可安全用于生产环境且被所有微软产品识别。但注意oidgen.exe生成的 OID 第 8 段固定为65535因此同一台机器上多次运行会得到...65535.1、...65535.2等序列。若需多个不同组织标识仍需手动构造。3.3 OID 的终极验证用 ldapsearch 确认其可解析生成 OID 后必须验证其是否被 Schema 引擎正确加载。使用ldp.exe执行精确查询在 ldp.exe 中Bind 到 Schema MasterBrowse → Search → BaseDN:CNSchema,CNConfiguration,DCcontoso,DClocalFilter:(attributeID1.2.840.113556.1.8000.2554.12345.1)若返回空结果说明该 OID 尚未注册若返回一条attributeSchema对象则证明注册成功。实操避坑我曾因在 OID 中误加空格如1.2.840.113556.1.8000.2554.12345. 1导致 Filter 查询始终为空。Schema 引擎对 OID 的空格极其敏感——它不进行 trim而是直接判定为非法字符串。务必用纯文本编辑器检查确保无不可见字符。OID 不是装饰品它是 AD 认证该属性合法性的第一道闸门。跳过此步后面所有操作都是空中楼阁。4. 用 ADSI Edit 精准创建属性不是填表而是编写一份 LDAP 协议契约ADSI Edit 是 Server 2012 中唯一原生支持 Schema 编辑的 GUI 工具但它绝非“可视化表单”。它的每个字段都对应 LDAP 协议中一个严格的语法约束。填错一个值轻则属性不可用重则 Schema 锁死。下面以创建contosoEmployeeExpiryDate员工合同到期日为例逐字段拆解其真实含义与填写逻辑。4.1 创建新属性的完整路径打开adsiedit.msc→ 右键“ADSIEDIT” → “Connect to…”Select well known naming context:SchemaServer: 输入 Schema Master 主机名如dc01.contoso.localAuthentication:Default必须用 Enterprise Admin 账户展开CNSchema,CNConfiguration,DCcontoso,DClocal右键 → “Create Object…” → Class:attributeSchema→ Next此时进入核心配置页共 12 个必填/选填字段。我们只聚焦最关键的 6 个字段名推荐值技术原理与填写逻辑Common-Name (CN)contosoEmployeeExpiryDate必须全小写、无空格、无特殊字符。这是 LDAP 搜索时使用的属性名如Get-ADUser -Properties contosoemployeeexpirydate。AD 会自动转为小写存储但大小写混用易引发脚本兼容问题。LDAP-Display-NamecontosoEmployeeExpiryDate显示名可含大小写。组策略管理单元GPMC和部分 GUI 工具会读取此值。必须与 CN 一致否则属性在 MMC 中显示异常。Attribute-ID1.2.840.113556.1.8000.2554.12345.1前文生成的 OID。Schema 引擎据此校验属性合法性。DescriptionContract expiry date for Contoso employees纯描述文本无技术约束。但建议写明业务含义与数据格式如“YYYY-MM-DD 格式日期”方便后续维护者理解。OM-Object-Classestop;user;contact;inetOrgPerson最关键字段它定义该属性可附加到哪些对象类。必须显式列出所有目标类用分号分隔。若只填user则该属性在联系人contact对象上不可见。Server 2012 不支持通配符必须穷举。Syntax2.5.5.14Generalized-Time属性值的数据类型。2.5.5.14表示 ISO 8601 格式时间如20250315000000.0Z。若误选2.5.5.12Unicode String则无法用Get-ADUser -Filter {contosoEmployeeExpiryDate -gt 20250101}进行日期过滤。提示Syntax字段的 OID 值必须准确。常见值对照表如下语义OIDPowerShell 中的等效类型Unicode 字符串2.5.5.12[string]64 位整数2.5.5.16[int64]布尔值2.5.5.8[bool]通用时间2.5.5.14[datetime]需按 LDAP 格式存储二进制数据2.5.5.10[byte[]]4.2 为什么OM-Object-Classes必须显式声明这是 Server 2012 Schema 设计中最反直觉的一点。很多人认为“我只想用在 user 上”于是只填user。但实际业务中HR 系统常将外包人员建为contact对象而他们同样有合同到期日。若未在OM-Object-Classes中加入contact则对该 contact 执行Set-ADObject会报错Set-ADObject : The specified directory service attribute or value does not exist因为 Schema 引擎在写入前会严格校验目标对象的objectClass是否在OM-Object-Classes白名单中。它不继承、不推测、不默认——只做精确匹配。4.3 创建后的强制验证步骤属性创建完成后不能立即使用。必须执行三步验证重启 Netlogon 服务在所有 DC 上net stop netlogon net start netlogon原因Netlogon 服务缓存 Schema 元数据重启强制其重新加载。等待 Schema 复制完成使用repadmin /showrepl确认所有 DC 的CNSchema,CNConfiguration,...分区复制状态为0。用 PowerShell 验证属性可见性# 在任意 DC 上执行 Get-ADObject -SearchBase CNSchema,CNConfiguration,DCcontoso,DClocal -Filter ldapDisplayName -eq contosoEmployeeExpiryDate -Properties lDAPDisplayName, attributeID, oMSyntax若返回对象且oMSyntax值与你设置的 OID 一致则证明创建成功。实操心得我养成了一个习惯——在 ADSI Edit 中创建属性后立刻用ldp.exe执行一次SearchFilter 为(lDAPDisplayNamecontosoEmployeeExpiryDate)。如果ldp.exe能查到而 PowerShell 查不到那一定是 Netlogon 缓存未刷新。反之亦然。这两个工具的响应差异是定位 Schema 同步问题的黄金线索。5. 将属性挂载到 user 类不是“添加”而是“签署一份双向协议”创建好属性只是完成了“造砖”要让它在用户对象上可用还需将其“挂载”Add到user类定义中。这一步常被误解为“把字段塞进表单”实则是修改user类的 Schema 定义使其声明“我支持这个属性”。Server 2012 要求你必须同时修改两个地方mayContain可选属性列表和systemMayContain系统级可选属性列表否则该属性在 GUI 和 PowerShell 中均不可见。5.1 为什么必须双写mayContain与systemMayContainuser类是一个复合类auxiliary class其属性来源分为两类mayContain普通用户可读写的属性出现在“用户属性”GUI 选项卡中。systemMayContain系统级属性通常由后台服务如 Kerberos、KDC写入GUI 不显示但 PowerShell 可访问。若只加到mayContain则Get-ADUser -Properties *能返回该字段但你在“用户属性”对话框的“其他”选项卡里找不到它若只加到systemMayContain则 GUI 完全不可见且Set-ADUser会报错“属性不受支持”。Server 2012 的设计逻辑是GUI 可见性与 PowerShell 可访问性必须由两个独立字段共同授权。5.2 挂载操作的精确步骤ADSI Edit在 ADSI Edit 中导航至CNUser,CNSchema,CNConfiguration,DCcontoso,DClocal右键 → “Properties” → 找到mayContain属性 → 点击 “Edit…”在弹出窗口中点击 “Add…”输入contosoEmployeeExpiryDate必须与之前创建的lDAPDisplayName完全一致包括大小写点击 OK → Apply同样操作找到systemMayContain属性 → “Edit…” → “Add…” → 输入相同值 → Apply关键动作点击 “Apply” 后必须点击 “OK” 关闭 Properties 窗口。仅点 Apply 不生效——这是 ADSI Edit 的一个隐藏机制它把修改暂存在内存直到窗口关闭才提交到 LDAP。提示mayContain和systemMayContain是多值属性multi-valued因此可以安全地添加多个自定义属性无需担心覆盖原有值。我通常一次性把本次迭代的所有属性都加进去避免频繁重启服务。5.3 挂载后的即时验证用Get-ADObject确认类定义更新挂载完成后立即验证user类是否已包含该属性# 获取 user 类定义 $userClass Get-ADObject -Identity CNUser,CNSchema,CNConfiguration,DCcontoso,DClocal -Properties mayContain, systemMayContain # 检查是否在两个列表中都存在 $userClass.mayContain -contains contosoEmployeeExpiryDate # 应返回 True $userClass.systemMayContain -contains contosoEmployeeExpiryDate # 应返回 True若任一返回False说明挂载未成功。此时不要重试而是检查是否在 ADSI Edit 中点击了 “OK” 而非仅 “Apply”是否在正确的CNUser对象上操作不是CNOrganizational-Unit或其他类是否使用 Enterprise Admin 账户绑定普通 Domain Admin 权限不足实操避坑我曾因在CNPerson类上误操作导致contosoEmployeeExpiryDate出现在所有person子类如contact、inetOrgPerson中但user类反而没挂载。结果 HR 系统写入contact对象成功写入user对象却失败。排查时我用Get-ADObject -Filter {objectClass -eq user}检查了所有 user 对象的objectClass属性才发现其继承链中缺少contosoEmployeeExpiryDate的声明。挂载不是终点而是属性真正“活起来”的起点。只有当user类明确声明支持它AD 才会为每个用户实例分配该属性的存储空间并开放读写通道。6. 权限委派与 PowerShell 实操让业务系统能读能写而不是只给你自己用属性创建并挂载后它默认只对 Schema Admins 和 Enterprise Admins 可写。但业务需求是HR 系统要用服务账户批量更新contosoEmployeeExpiryDateIT 支持组要能用 PowerShell 查询过期用户。这就必须进行精细的权限委派Delegation而非简单地把整个 OU 的“完全控制”权限给出去——那是生产环境的大忌。6.1 为什么不能直接给“完全控制”contosoEmployeeExpiryDate是一个高敏属性它直接影响账户启用状态。若赋予某服务账户对user类的“完全控制”它不仅能改这个字段还能删用户、改密码、禁用账户。我见过某公司因图省事给 HR 服务账户OUEmployees,DCcontoso,DClocal的“完全控制”结果 HR 系统的一个 SQL 注入漏洞导致攻击者通过 LDAP 注入删除了整个 OU 的用户。正确做法是最小权限原则Principle of Least Privilege——只授予该属性的读写权且限定在特定 OU 范围内。6.2 用dsacls命令实现原子级权限委派dsacls是 Server 2012 中最精准的 AD 权限管理命令。它直接操作 ACLAccess Control List不经过 GUI 的抽象层因此可精确到单个属性。以下是为contoso-hr-svc服务账户授予contosoEmployeeExpiryDate读写权的完整命令# 为 contoso-hr-svc 账户授予对 Employees OU 下所有 user 对象的 # contosoEmployeeExpiryDate 属性的读写权限 dsacls OUEmployees,DCcontoso,DClocal ^ /G contoso\contoso-hr-svc:WP;contosoEmployeeExpiryDate;user ^ /I:S参数详解OUEmployees,DCcontoso,DClocal权限作用范围OU/GGrant授予权限contoso\contoso-hr-svc:WP;contosoEmployeeExpiryDate;usercontoso\contoso-hr-svc—— 目标账户WP—— Write Property写属性权限contosoEmployeeExpiryDate—— 目标属性名必须与 LDAP-Display-Name 一致user—— 目标对象类限定只对 user 对象生效/I:SInherit to Subobjects继承到子对象确保该权限应用到 OU 内所有 user 实例提示若还需读取权限如 HR 系统需校验当前值则再加一行dsacls OUEmployees,DCcontoso,DClocal /G contoso\contoso-hr-svc:RP;contosoEmployeeExpiryDate;user /I:SRP表示 Read Property。6.3 PowerShell 实战读、写、过滤一条龙权限委派完成后即可用标准 PowerShell 命令操作写入属性HR 系统调用# 设置单个用户 Set-ADUser jane.doe -Replace {contosoEmployeeExpiryDate20250315000000.0Z} # 批量设置从 CSV 读取 Import-Csv hr-export.csv | ForEach-Object { Set-ADUser $_.SamAccountName -Replace {contosoEmployeeExpiryDate$_.ExpiryDate} }读取与过滤IT 支持脚本# 查询所有合同将在 30 天内到期的用户 $today Get-Date -Format yyyyMMddHHmmss.0Z $next30 (Get-Date).AddDays(30) | ForEach-Object { $_.ToString(yyyyMMddHHmmss.0Z) } Get-ADUser -SearchBase OUEmployees,DCcontoso,DClocal -Filter contosoEmployeeExpiryDate -ge $today -and contosoEmployeeExpiryDate -le $next30 -Properties contosoEmployeeExpiryDate | Select-Object Name, SamAccountName, contosoEmployeeExpiryDate注意-Filter中的日期必须为 LDAP 格式yyyyMMddHHmmss.0Z不能用 PowerShell 的[datetime]对象。这是 Server 2012 的硬性要求否则过滤失效。6.4 权限验证的黄金三步法在生产环境部署前必须用三类账户交叉验证HR 服务账户执行Set-ADUser确认无权限错误普通域用户执行Get-ADUser -Properties contosoEmployeeExpiryDate确认能读但不能写应报错Access is deniedIT 支持组成员执行过滤查询确认能读能过滤。实操心得我总在委派后用dsacls命令导出当前 OU 的完整 ACL保存为 baseline.txt。命令为dsacls OUEmployees,DCcontoso,DClocal baseline.txt这样当某天发现权限异常时可快速对比 ACL 差异定位是哪次委派操作引入了问题。权限不是“设完就完”而是持续验证的生命线。Server 2012 的 AD 权限模型足够精细就看你是否愿意花 5 分钟用dsacls写清楚每一行授权。7. 同步延迟与故障排查当属性“明明加了却看不见”时你在和谁较劲最令人抓狂的场景莫过于你在 Schema Master 上成功创建并挂载了属性Get-ADObject能查到dsacls显示权限正确但执行Get-ADUser -Properties contosoEmployeeExpiryDate却返回空值。这不是代码 bug而是 Server 2012 AD 的“最终一致性”Eventual Consistency在作祟——它不是实时同步而是依赖后台复制引擎的调度。7.1 Server 2012 的 Schema 复制机制不是“推”而是“拉”与用户对象不同Schema 更改不走常规的“推送-确认”流程而是采用“拉取式”同步Schema Master 将更改写入自己的ntds.dit其他 DC 启动一个名为KCCKnowledge Consistency Checker的后台进程KCC 每 15 分钟检查一次 Schema NC 的 USNUpdate Sequence Number若发现 USN 增加则发起replication request拉取增量。这意味着从 Schema Master 写入完成到其他 DC 加载新 Schema理论最大延迟为 15 分钟。但实测中因网络抖动、DC 负载高、KCC 进程卡顿常出现 20–45 分钟的延迟。7.2 故障排查的四层诊断法当属性“看不见”时按以下顺序逐层排查第一层确认 Schema Master 本身是否生效# 在 Schema Master 上执行 Get-ADObject -SearchBase CNSchema,CNConfiguration,DCcontoso,DClocal -Filter lDAPDisplayName -eq contosoEmployeeExpiryDate # 必须返回对象第二层确认目标 DC 是否完成 Schema 复制# 在目标 DC如 dc02上执行 repadmin /showrepl dc02.contoso.local | findstr CNSchema # 输出中应有类似 # Default-First-Site-Name\DC02 via RPC # DSA object GUID: 123e4567-e89b-12d3-a456-426614174000 # Last attempt 2025-03-15 10:23:45 AM 0 (0x0) (success) # Last success 2025-03-15 10:23:45 AMLast success时间必须在 15 分钟内且 0表示成功。第三层确认 Netlogon 服务是否已刷新缓存# 在目标 DC 上执行 net stop netlogon net start netlogon # 然后立即执行 Get-ADObject -SearchBase CNSchema,CNConfiguration,DCcontoso,DClocal -Filter lDAPDisplayName -eq contosoEmployeeExpiryDate # 若此时能查到则证明是缓存问题第四层确认 PowerShell 模块是否加载最新 Schema# 强制重新加载 ActiveDirectory 模块 Remove-Module ActiveDirectory -Force Import-Module ActiveDirectory # 再次执行 Get-ADUser 测试提示Get-ADUser命令在首次运行时会缓存 Schema 结构。若 Schema 在模块加载后更新它不会自动感知必须重启 PowerShell 会话或重新导入模块。7.3 一个真实案例被忽略的“复制拓扑”陷阱某次我在 dc01Schema Master上创建属性后dc02 能立即看到但 dc03 始终看不到。repadmin /showrepl显示 dc03 与 dc01 的连接状态为Disabled。排查发现该域启用了“站点链接桥接”Site Link Bridging而 dc03 所在站点与
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表