none
Проверка на вхождение компьютера в домен. RRS feed

  • Вопрос

  • Добрый день.

    Необходи автоматизировать процесс поиска компьютеров в сети которые есчо не члены домена domain.local.

    В идеале хотелось бы что бы скрипт ппинговал сеть допустим 10.200.200.1-10.200.100.254 и доступные компы по dhs-имени проверял на вхождение в домен  domain.local. Как сие организовать - ума не приложу...

    Заранее спасибо за советы.

    16 июня 2014 г. 6:36

Все ответы

  • 1) Возможность удаленного подключения к компьютерам не в домене(правила в Firewall)?

    2) Пароль учетной записи пользователя, который имеет удаленный доступ к компьютерам не в домене?

    3) Недоменные компьютеры регистрируют свои записи в DNS?

    16 июня 2014 г. 7:21
    Отвечающий
  • 1-да

    2- локальный администратор

    3-да

    16 июня 2014 г. 8:38
  • 1) Качаем Ping-IPRange скрипт http://gallery.technet.microsoft.com/scriptcenter/Fast-asynchronous-ping-IP-d0a5cf0e

    2) Ping-IPRange -StartAddress 10.200.200.1 -EndAddress 10.200.200.254 -Interval 20 - диапазон ip

    3) Wmi класс  Win32_ComputerSystem,позволяем получить значение PartOfDomain.

    4) $localCred = Get-Credential "Администратор" - учетные данные для не доменных компьютеров

    5) $domCred = Get-Credential "DOM\Администратор" - учетные данные для доменных компьютеров

    Function Get-PartOfDomain {
    	param($ip,$cred)
    	
    	try {
    		Get-WmiObject Win32_ComputerSystem -ComputerName $ip -Credential $cred -ErrorAction Stop | 
    			Select-Object @{n="IPAddress";e={$ip}},DNSHostName,Domain,PartOfDomain 
    	}
    	catch {
    		$error = "ERROR : $_"
    		"" | Select-Object @{n="IPAddress";e={$ip}},
    			@{n="DNSHostName";e={$null}},@{n="Domain";e={$error}},@{n="PartOfDomain";e={"False"}}
    	}
    }
    
    $localCred = Get-Credential "Администратор"
    $domCred = Get-Credential "DOM\Администратор"
    
    Ping-IPRange -StartAddress 10.200.200.1 -EndAddress 10.200.200.254 -Interval 20 | Foreach {
    	$result = Get-PartOfDomain $_.IPAddress $domCred
    		
    	if($result.DNSHostName) {
    		$result
    	}
    	else {
    		Get-PartOfDomain $_.IPAddress $localCred
    	}
    }

    16 июня 2014 г. 9:47
    Отвечающий
  • извените а как добавить вывод результата в файл?
    16 июня 2014 г. 10:54
  • извените а как добавить вывод результата в файл?

    1) После последней } добавить | Out-File result.txt ( в конечном итоге ... } | Out-File result.txt)

    2) Или сначала сохранить в переменную

    $out = Ping-IPRange -StartAddress .......
    $out | Out-File result.txt

    16 июня 2014 г. 11:14
    Отвечающий
  • я имел ввиду вывести в файл имена машин не в домене
    16 июня 2014 г. 12:20
  • я имел ввиду вывести в файл имена машин не в домене

    $out = Ping-IPRange -StartAddress .......
    $out | Where {$_.PartOfDomain -ne "True"} | Out-File result.txt

    16 июня 2014 г. 12:29
    Отвечающий
  • Простите а зачем в скрипте учётные данные локального админа?

    И не могли бы Вы привести листинг окончательного скрипта?

    Ия правильно Вас понял что достаточно вставить Ваш скрипт после скрипта пингования???


    17 июня 2014 г. 5:30
  • 1) К не доменным компьютерам, как будет осуществляться подключение без учетных данных?

    2) Скрипт приведен полностью, см. выше.

    3) Да, там функция.

    17 июня 2014 г. 5:45
    Отвечающий
  • Вот какой скрипт у меня получился:

    Function Get-PartOfDomain {
    param($ip,$cred)

    try {
    Get-WmiObject Win32_ComputerSystem -ComputerName $ip -Credential $cred -ErrorAction Stop |
    Select-Object @{n="IPAddress";e={$ip}},DNSHostName,Domain,PartOfDomain
    }
    catch {
    $error = "ERROR : $_"
    "" | Select-Object @{n="IPAddress";e={$ip}},
    @{n="DNSHostName";e={$null}},@{n="Domain";e={$error}},@{n="PartOfDomain";e={"False"}}
    }
    }
    $domUser = "domain.local\Administrator"
    $domPass = ConvertTo-SecureString –String "pass" –AsPlainText -Force
    $domCred = New-Object –TypeName System.Management.Automation.PSCredential –ArgumentList $domUser, $domPass

    $localUser = "Администратор"
    $localPass = ConvertTo-SecureString –String "pass" –AsPlainText -Force
    $localCred = New-Object –TypeName System.Management.Automation.PSCredential –ArgumentList $localUser, $localPass

    $out = Ping-IPRange -StartAddress 10.206.33.30 -EndAddress 10.206.33.254 -Interval 20 | Foreach {
    $result = Get-PartOfDomain $_.IPAddress $domCred

    if($result.DNSHostName) {
    $result
    }
    else {
    Get-PartOfDomain $_.IPAddress $localCred
    }
    }

    $out | Where {$_.PartOfDomain -ne "True"} | Out-File C:\111\10.206.33.txt

    Но в результирующем файле на машинах которые в домене выводит или:

    10.206.33.44 ERROR : The RPC server is unavailable.... False

    или ошибку вида:

    10.206.33.80 ERROR : Access is denied. (Exception f... False

    На машинах членах рабочих групп отрабатывает вроди нормально:

    10.206.33.31 office-794 OFFICE False

    Учётные данные я верно ввожу.

    17 июня 2014 г. 9:14
  • 1) Посмотреть правила фаейрволла

    2) Проверить пароль и лучше использовать одинарные кавычки - 'P@$$w0rd1'

    3) Взять для теста рабочий доменный ip и посмотреть вывод.

    Function Get-PartOfDomain {
    	param($ip,$cred)
    	
    	try {
    		Get-WmiObject Win32_ComputerSystem -ComputerName $ip -Credential $cred -ErrorAction Stop | 
    			Select-Object @{n="IPAddress";e={$ip}},DNSHostName,Domain,PartOfDomain 
    	}
    	catch {
    		$error = "ERROR : $_"
    		"" | Select-Object @{n="IPAddress";e={$ip}},
    			@{n="DNSHostName";e={$null}},@{n="Domain";e={$error}},@{n="PartOfDomain";e={"False"}}
    	}
    }
    		
    $domUser = "domain.local\Administrator"
    $domPass = ConvertTo-SecureString –String 'pass' –AsPlainText -Force
    $domCred = New-Object –TypeName System.Management.Automation.PSCredential –ArgumentList $domUser, $domPass
    
    Get-PartOfDomain 10.206.33.80 $domCred

    17 июня 2014 г. 9:57
    Отвечающий
  • Тоже самое:

    10.206.33.80 ERROR : The RPC server is unavailable.... False  

    Файервол везде выключен.

    А нельзяли опрашивать не саму машину а проверять в AD существование данного компа?

    Т.е. по днс-имени посмотреть есть ли такой хост в АД???

    17 июня 2014 г. 10:19
  • Get-ADComputer -Filter {Enabled -eq $true} -Properties IPV4Address | Select DNSHostName,IPv4Address


    • Изменено KazunEditor 17 июня 2014 г. 10:33
    17 июня 2014 г. 10:32
    Отвечающий
  • А как это к скрипту пингования прикрутить?
    17 июня 2014 г. 10:38
  • А как это к скрипту пингования прикрутить?

    Для чего?
    17 июня 2014 г. 10:49
    Отвечающий
  • Я вижу это так:

    после того как отработала пинговалка по днс-имени посмотреть есть ли в АД такой комп или нет - если нет то занести его имя в файлик. Или я неясно выражаю свои мысли?

    17 июня 2014 г. 11:17
  • Я вижу это так:

    после того как отработала пинговалка по днс-имени посмотреть есть ли в АД такой комп или нет - если нет то занести его имя в файлик. Или я неясно выражаю свои мысли?


    Пинг идет по ip,откуда dns имена?
    17 июня 2014 г. 11:34
    Отвечающий
  • ну может можно резолвить ip в dns имя
    17 июня 2014 г. 11:41
  • ну может можно резолвить ip в dns имя
    Зона ptr есть?
    17 июня 2014 г. 11:59
    Отвечающий
  • да. днс работает
    17 июня 2014 г. 13:17
  • $adComputers = Get-ADComputer -Filter {Enabled -eq $true} | Foreach {$_.DnsHostName}
    
    Ping-IPRange -StartAddress 10.200.200.1 -EndAddress 10.200.200.254 -Interval 20 | Foreach {
    	$ip = $_.IPAddress
    	try {
    		$entry = [Net.Dns]::GetHostEntry($ip).HostName
    		if($adComputers -notcontains $entry.HostName) { 
    			"{0}`t{1}" -f $entry.HostName,$($entry.AddressList.IPAddressToString) | Add-Content pc.txt
    		}
    	}
    	catch {
    		$ip | Add-Content pc.txt
    	}
    }


    • Изменено KazunEditor 17 июня 2014 г. 13:42
    17 июня 2014 г. 13:42
    Отвечающий
  • скрипт отрабатывает без ошибок но создаёт пустой файл
    18 июня 2014 г. 6:08
  • Строку [Net.Dns]::GetHostEntry($ip).HostName заменить на [Net.Dns]::GetHostEntry($ip)
    18 июня 2014 г. 6:13
    Отвечающий
  • теперь вроде машины появляются но выводит так же и машины которые в домене а хотелось бы что бы выводил только те что не в домене
    18 июня 2014 г. 6:56
  • Уважаемый Kazun может всё-таки допилите скрипт ведь уже так много сделано...
    Строку [Net.Dns]::GetHostEntry($ip).HostName заменить на [Net.Dns]::GetHostEntry($ip)

    19 июня 2014 г. 5:45