2013-06-28 3 views
2

Я застрял в глупой проблеме, что я не могу понять, как ее решить.
Мне нужно получить все контроллеры домена в доверенном домене.получить все ADcontroller другого домена

С этим куском кода я получаю все DC в текущем домене Get-ADDomainController -Filter *
С этим я получаю один DC от целевого домена Get-ADDomainController -domain MyTrustedDomain -Discover
Но как я могу получить все DC в целевом домене?

ответ

3

Один из способов без использования модуля AD:

$a = new-object 'System.DirectoryServices.ActiveDirectory.DirectoryContext'("domain", "other.domain.local") 
[System.DirectoryServices.ActiveDirectory.DomainController]::FindAll($a) 

Вы должны быть «аутентифицированным пользователем» в удаленном домене или добавить параметр имени пользователя и пароля в объект DirectoryContext

+0

отличное решение !! большое спасибо – Naigel

+0

@LorenzoC Рад помочь! –

+0

Есть ли аналогичный способ получить серверы из этого домена без использования модуля AD? что-то вроде '[System.DirectoryServices.ActiveDirectory.AnyComputer] :: FindAll ($ a)' – Naigel

4

Не может проверить это из-за отсутствия AD, но вы можете попробовать -Server вариант с полным доменным именем доверенного домена:

Get-ADDomainController -Filter * -Server trusted.example.com 
0

от: help get-addomaincontroller -examples

Это должно перечислить все контроллеры домена в домене

-------------------------- ПРИМЕР 12 ---- ----------------------

C:\PS>Get-ADDomainController -Filter { isGlobalCatalog -eq $true -and Site -eq "Default-First-Site-Name" } 


Get all global catalogs in a given site. 
0
Get-ADDomain -Identity <DOMAIN NAME> | select -ExpandProperty ReplicaDirectoryServers 
0

Вот что я использовал

cls 

$domains = (Get-ADForest).Domains; 

foreach ($domain in $domains) 

{ 

Write-Host $domain 
(Get-ADDomain -Identity $domain | select -ExpandProperty ReplicaDirectoryServers).Count; 
Write-Host ""; 
$totalCount = $totalCount + (Get-ADDomain -Identity $domain | select -ExpandProperty ReplicaDirectoryServers).Count; 
} 

Write-Host "Total domain controller count is: "$totalCount 
1

Я попадался такая же проблема, как я регулярно работаю с несколькими доменами. Я надеялся на более элегантное решение, но пока лучшее, что я придумал, - это сделать вашу работу еще на один шаг.

Если Get-ADDomainController -domain MyTrustedDomain -Discover дает вам один сервер в целевом домене, вы можете передать его параметру -server для запроса этого DC. Вам необходимо предоставить учетные данные для запроса DC из другого домена, кроме вашего сеанса входа в систему, если не существует доверия.

$targetdomaindc = Get-ADDomainController -DomainName MyTrustedDomain -Discover 
$targetdcname = $($targetdomaindc.hostname) 
Get-ADDomainController -Filter * ` 
    -Server $targetdcname ` 
    -Credential (Get-Credential MyTrustedDomain\username) | ft HostName 

или

Get-ADDomainController -Filter * ` 
    -Server $((Get-ADDomainController -DomainName MyTrustedDomain -Discover).hostname) ` 
    -Credential (Get-Credential MyTrustedDomain\username) | ft HostName 

Если вы делаете такого рода вещи много, вы всегда можете сохранить свои учетные данные в переменную для повторного использования, $cred = Get-Credential MyTrustedDomain\username) и сохранить повторные запросы. Пароль хранится как System.Security.SecureString и будет защищен до тех пор, пока вы сохраните его в своей сессии.

До тех пор, пока командлет Get-ADDomainController не будет обновлен, чтобы разрешить как параметр -filter, так и параметр Domainname, мы придерживаемся обходного пути.

-1

Иногда Powershell добавляет сложности, просто откройте CMD строку и введите

C: \ Windows \ System32 \ nltest.exe/dclist: [доверенный домен]

Конечно, заменить [доверенный домен ] с именем домена, DC которого вы хотите.

1

Эта команда выведет список всех контроллеров домена в лесу для каждого домена

(get-adforest).domains |%{get-addomaincontrollers -filter * -server $_}