获取本地计算机的 Active Directory 站点名称的最佳 PowerShell 方法

问题描述 投票:0回答:1

在 PowerShell 中获取当前 Active Directory (AD) 站点有哪些不同方法 - 哪种方法最快、最高效且适用于大多数场景?

powershell active-directory
1个回答
0
投票

有多种方法可用:

  1. 使用 nltest.exe 命令行工具 - 不会生成网络流量,但因为您正在执行命令,所以速度很慢,并且您需要确保事后测试 $LASTERRORCODE 以防出现错误:

(& "$env:SystemRoot\System32\nltest.exe" /DSGETSITE)[0]

  1. 使用 .NET - 如果您需要完整的站点信息以及名称,速度更快且有用 - 但请注意,使用此 .NET 类的任何调用都会生成到本地域控制器的流量:

[System.DirectoryServices.ActiveDirectory.ActiveDirectorySite]::GetComputerSite().Name

  1. 使用注册表 - 不会快速生成网络流量,但请注意,在域控制器上此值可能不存在或可能不正确:

(Get-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters).DynamicSiteName

  1. 使用 WMI 访问 Win32_NTDomain 类 - 不要这样做 - 它非常慢,并且每次运行时都会生成网络流量:

(Get-CimInstance -ClassName Win32_NTDomain -Filter 'DomainName != NULL').ClientSiteName

  1. (我个人最喜欢的) 使用 AdSystemInfo COM 对象 - 不会生成网络流量,会抛出正常的 PowerShell 错误,无需额外的错误处理,适用于所有设备,而且速度很快。

[System.__ComObject].InvokeMember("SiteName", [System.Reflection.BindingFlags]::GetProperty, $null, (New-Object -ComObject "ADSystemInfo"), $null)

选项 1-3:https://powershellmagazine.com/2013/04/23/pstip-get-the-ad-site-name-of-a-computer/

选项 4:https://www.reddit.com/r/PowerShell/comments/4cjdk8/get_the_ad_site_name_of_a_computer/

选项 5:https://learn.microsoft.com/en-us/windows/win32/adsi/iadsadsysteminfo-property-methods

© www.soinside.com 2019 - 2024. All rights reserved.