Witryna zapytania dla danego adresu IP z witryn i usług AD

1

Windows Active Directory utrzymuje listę podsieci do przypisań witryn (w „Active Directory - Witryny i usługi” -> Witryny -> Podsieci). Powiązania podsieci z lokacją są oczywiście używane przez stacje robocze w celu wybrania odpowiedniego kontrolera domeny do uwierzytelnienia. Ale w jaki sposób można wykorzystać te informacje programowo do innych celów? Na przykład: Biorąc pod uwagę adres IP, chciałbym uzyskać takie rzeczy, jak nazwa witryny znaleziona we właściwościach w najlepiej pasującej podsieci. Dzięki temu, co do tej pory znalazłem, mógłbym wyświetlić listę wszystkich podsieci i sam dopasować podsieć do wszystkich z nich - ale ponieważ to zadanie jest wykonywane w taki czy inny sposób przy każdym ponownym uruchomieniu stacji roboczej, jestem pewien, że istnieje jakaś bezpośrednia metoda tego ...

Hagen von Eitzen
źródło

Odpowiedzi:

1

nltest /server:servername /dsgetsite poda nazwę witryny, wysyłając zapytanie do AD.

Możesz owinąć go w PowerShell, aby łatwiej używać go programowo:

function Get-SystemSite($SystemName)
{
    $site = nltest /server:$SystemName /dsgetsite 2>$null
    if($LASTEXITCODE -eq 0) { $site[0] }
}
phoebus
źródło
Dzięki. Nie było to dokładnie to, czego szukałem (lub moje pytanie nie było wystarczająco jasne), ale jako punkt wyjścia znalazłem teraz nltest /DSADDRESSTOSITE: ipaddress i DsAddressToSiteNames ()
Hagen von Eitzen
@HagenvonEitzen Przepraszam, że z jakiegoś powodu miałem nazwę hosta w mózgu, a nie adres IP.
phoebus
-1

Napisałem tę funkcję, aby uprościć korzystanie z nltest, jak sugerował phoebus.

Function Get-AdSiteAndSubnetFromIP {
<#
.Synopsis
Get the matching AD Site and Subnet for a given IP Address
.DESCRIPTION
Get the matching AD Site and Subnet for a given IP Address.  The results will be returned as a Hash.
.EXAMPLE
Get-AdSiteAndSubnetFromIP -ip 172.28.68.53

ADSite        ADSubnet     
------        --------     
SiteA         10.1.0.0/16
.EXAMPLE

(Get-AdSiteAndSubnetFromIP -ip 172.28.68.53).ADSite

SiteA
#>
    param([string]$ip
        )
    $site = nltest /DSADDRESSTOSITE:$ip /dsgetsite 2>$null
    if ($LASTEXITCODE -eq 0) {
        $split = $site[3] -split "\s+"
        # validate result is for an IPv4 address before continuing
        if ($split[1] -match [regex]"^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$") {
            "" | select @{l="ADSite";e={$split[2]}}, @{l="ADSubnet";e={$split[3]}}
        }
    }
}
ericnils
źródło