Kategorie szkoleń | Egzaminy | Kontakt

Odpowiedzi (4)

  • 4

Żeby pobrać z AD informacje o komputerach, można użyć polecenia PowerShell Get-ADComputer. Niestety AD w standardowej konfiguracji nie posiada informacji o adresach IP komputerów w domenie.

Informacje te możemy znaleźć na serwerze DNS lub odpytać każdy komputer po kolei przez WMI.

Ja wykorzystam DNS, może nie być aktualny, ale nie wymaga dostępności wszystkich komputerów w sieci w momencie wykonywania skryptu:

 

'"ComputerName","IPAddress"' | Out-File .\comps.csv

$comps = (Get-ADComputer -Filter * -SearchBase "ou=workstations,dc=altkom,dc=pl").name

foreach ($comp in $comps) {

$ip = ([System.Net.Dns]::GetHostAddresses("$comp")).IPAddressToString

'"{0}","{1}"' -f $comp,$ip | Out-File .\comps.csv

}

 

  • Odpowiedział
  • @ | 25.01.2015
  • TRENER ALTKOM AKADEMII
Komentarze
  • 5

W środowisku produkcyjnym ja osobiście używam konsolki DHCP.

Jeśli ma to być PowerShell, wykonamy to poprzez: 

Get-DhcpServerv4Lease

Podając nasz zakres np. tj. 172.16.200.0, mamy IP, mamy nazwę klienta, po której widać, czy nasza domena, czy np. "gość"  w 90% przypadków sprawdza się dobrze w praktyce.

Jedna uwaga - jeśli mamy czas dzierżawy np. 8 godzin, archiwalne wpisy mogą nie być dostępne.

  • Odpowiedział
  • @ | 26.01.2015
  • TRENER ALTKOM AKADEMII
  • 7

Jeszcze jedno rozwiązanie tego zagadnienia:

Get-AdComputer -filter * -properties  * |select Dnshostname, ipv4address
  • Odpowiedział
  • @ | 14.02.2015
  • TRENER ALTKOM AKADEMII
  • 3

Niestety, chyba żadna z przedstawionych wcześniej funkcji nie zwraca w pełni poprawnych wyników. Zwracają poprawne, zakładając sytuację idealną, gdzie dana stacja ma przypisany dokładnie 1 adres IP, natomiast w przypadku realnym, gdzie mamy włączone IPv4, IPv6 oraz kilka kart sieciowych, powyższe sposoby zwracają błędne/niepełne dane:


Przykładowo posiadam stację PC912 z adresami IP:
fe80::a888:db2d:dac3:f3b3%8
fe80::6c6d:edd9:33ba:6910%6
192.168.100.100
10.10.10.24


Sposób '1' tj.:

'"ComputerName","IPAddress"' | Out-File .\comps.csv

$comps = (Get-ADComputer -Filter * -SearchBase "ou=workstations,dc=altkom,dc=pl").name

foreach ($comp in $comps) {

$ip = ([System.Net.Dns]::GetHostAddresses("$comp")).IPAddressToString

'"{0}","{1}"' -f $comp,$ip | Out-File .\comps.csv

}


Zwraca wynik:

"PC912","System.Object[]"


Natomiast sposób '2' tj.:

"Get-AdComputer -filter * -properties  * |select Dnshostname, ipv4address"


Zwraca wynik:

Dnshostname                                                                               ipv4address
-----------                                                                               -----------
PC912.mkrzanowicz.pl                                                                    192.168.100.100


Żeby obsłużyć realne przypadki z wieloma adresami IP należałoby trochę stuningowac sposób '1' żeby wyglądał przykładowo tak:

'"ComputerName","IPAddress"' | Out-File .\comps.csv

$comps = (Get-ADComputer -Filter * ).name

foreach ($comp in $comps)
{
$result = $null
$ip = ([System.Net.Dns]::GetHostAddresses("$comp")).IPAddressToString
$ip | ForEach-Object {$result += "$_ "}
'"{0}","{1}"' -f $comp,$result
}


I dopiero wtedy zwróci on poprawnie wszystkie przypisane do stacji adresy IP w formie np.:

"PC912","fe80::a888:db2d:dac3:f3b3%8 fe80::6c6d:edd9:33ba:6910%6 192.168.100.100 10.10.10.24 "

Marcin_Krzanowicz
  • Odpowiedział
  • @ Marcin_Krzanowicz | 29.05.2015
    • laureat
    • 9
    • 4
    • 23