为什么 (Get-ADDomainController).Name 与 $env:LOGONSERVER 不同,也与 nltest /dsgetdc:myDOMAIN 不同

为什么 (Get-ADDomainController).Name 与 $env:LOGONSERVER 不同,也与 nltest /dsgetdc:myDOMAIN 不同

为什么(Get-ADDomainController).Name返回的结果与 不同$env:LOGONSERVER.Substring(2)?:

PS C:\> (Get-ADDomainController).Name
PAR-DC02
PS C:\> $env:LOGONSERVER.Substring(2)
PAR-DC03
PS C:\> nltest /dsgetdc:myDOMAIN | sls DC: | % { ( $_ -split('\s+') )[-1].substring(2) }
ANG-DC02

EDIT0:添加-Discover选项以Get-ADDomainController产生相同的结果:

PS C:\> (Get-ADDomainController -Discover).Name
PAR-DC02

答案1

我不能 100% 确定这是否是 Get-ADDomainController 的正确用法。其文档说,您必须传递参数-Discover才能从 Windows“DC 定位器”获取 DC;如果不这样做,那么它似乎只会任何DC 可用。我不确定,因为我没有可用的 cmdlet 来亲自测试它。

无论如何,LOGONSERVER环境变量仅设置登录时是处理你的最初的netlogon 请求;但由于它是一个环境变量,即使系统稍后选择不同的“最佳”DC,它也永远不会更新。系统可以随时出于任何原因选择不同的首选 DC - 即使在登录 15 分钟后,您可能已经从另一个 DC 获取了 Kerberos 票证。

(它也是 PDC/BDC 存在时的 NT4 时代的遗物——我的理解是它的唯一目的是允许登录脚本通过从 DC 获取文件\\%LOGONSERVER%\foo,但现在它都是多余的,因为你可以从 Active Directory 始终具有的 DFS 复制别名中获取文件\\ad.example.com。)

相关内容