[Powershell] GetHostAddresses werkt niet met een string

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het is misschien een hele domme vraag maar ik start net met powershell en ik zie niet meer wat ik fout doe.
Ik wil graag op een terminal server een script draaien waardoor ik wat gegevens van de client computer ophaal.

Nu gebruik ik dit om de computernaam van de client op te halen:
$computer = $env:CLIENTNAME

En wanneer ik de client zijn ip adres wil ophalen gebruik ik dit:
$ipaddress = [System.Net.Dns]::GetHostAddresses($computer)

Alleen hier gaat het fout, ik krijg de foutmelding "Host is onbekend"
Het vreemde is wanneer ik de computernaam zelf intyp inplaats $computer dan krijg ik wel netjes het ip adres te zien.
Zo werkt het wel:
$ipaddress = [System.Net.Dns]::GetHostAddresses('Laptop144201')

...

Ik heb deze regels al getest;
$ipaddress = [System.Net.Dns]::GetHostAddresses($computer)
$ipaddress = [System.Net.Dns]::GetHostAddresses('$computer')
$ipaddress = [System.Net.Dns]::GetHostAddresses('" + $computer + "')
$ipaddress = [System.Net.Dns]::GetHostAddresses("$computer")


Waarom lukt het wel wanneer ik de computernaam zelf intyp om het ip adres te zien en waarom lukt het niet wanneer ik een string daarvoor gebruik? Wat doe ik fout?

...

Alle reacties


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 18:48
En welke waarde staat er in de $computer variable wanneer je de GetHostAddresses aanroept?
Ik gebruik zelf btw altijd $env:computername ipc $env:clientname (ik wist niet dat die bestond als environment variable).

Overigens heb ik mijn vraagtekens bij de betrouwbaarheid van jouw methode : wat je nu doet is lokaal op de machine de hostnaam opvragen en dan vervolgens op de DNS server het IP adres opvragen ipv deze vanuit de lokale machine uit te lezen. Wat als er een verouderde/incorrecte/geen DNS entry aanwezig is (of meerdere entries)? Of wat als een machine meerdere netwerkkaarten heeft (server, laptops met wifi en een nic) en meerdere IPs?

IP uitlezen in powershell kan overigens op meerdere manieren (get-netipaddress of dmv wmi).

Acties:
  • 0 Henk 'm!

  • Brahiewahiewa
  • Registratie: Oktober 2001
  • Laatst online: 30-09-2022

Brahiewahiewa

boelkloedig

Killah_Priest schreef op woensdag 13 april 2016 @ 19:21:
En welke waarde staat er in de $computer variable wanneer je de GetHostAddresses aanroept?
Ik gebruik zelf btw altijd $env:computername ipc $env:clientname (ik wist niet dat die bestond als environment variable)...
computername geeft de naam van de terminal server; clientname geeft de naam van de terminalserver client

Bij mij werkt 't gewoon
code:
1
2
3
4
5
6
7
8
9
10
PS C:\Users\Administrator> echo ([system.net.dns]::gethostaddresses($env:clientname))


Address           : 1621889196
AddressFamily     : InterNetwork
ScopeId           :
IsIPv6Multicast   : False
IsIPv6LinkLocal   : False
IsIPv6SiteLocal   : False
IPAddressToString : 172.16.172.96

[ Voor 27% gewijzigd door Brahiewahiewa op 13-04-2016 22:25 ]

QnJhaGlld2FoaWV3YQ==


Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 18:48
Brahiewahiewa schreef op woensdag 13 april 2016 @ 21:54:
[...]

computername geeft de naam van de terminal server; clientname geeft de naam van de terminalserver client

Bij mij werkt 't gewoon
code:
1
2
3
4
5
6
7
8
9
10
PS C:\Users\Administrator> echo ([system.net.dns]::gethostaddresses($env:clientname))


Address           : 1621889196
AddressFamily     : InterNetwork
ScopeId           :
IsIPv6Multicast   : False
IsIPv6LinkLocal   : False
IsIPv6SiteLocal   : False
IPAddressToString : 172.16.172.96
Ahh, op die manier.
Dan snap ik ook direct waarom de TS dit dan via DNS wilt doen.
Alleen vraag ik mij weer af wat voor informatie hij wilt hebben : voorzover ik het zie geeft deze variable alleen de info weer van de user in welke context het script draait (en als je vanuit een console sessie verbindt dan kan dit dus "console" zijn).

Als je IP adressen wilt hebben van users op je terminal server dan kun je deze uit de terminal-server-localsessionmanager events halen, deze logt ook IP adressen en connects/disconnects (dus ook reconnect van een disconnected sessie)

Acties:
  • 0 Henk 'm!

  • Brahiewahiewa
  • Registratie: Oktober 2001
  • Laatst online: 30-09-2022

Brahiewahiewa

boelkloedig

Killah_Priest schreef op woensdag 13 april 2016 @ 23:08:
[...]Als je IP adressen wilt hebben van users op je terminal server dan kun je deze uit de terminal-server-localsessionmanager events halen, deze logt ook IP adressen en connects/disconnects (dus ook reconnect van een disconnected sessie)
Mweeh, of je nou door 't eventlog moet ploegen of een dns-query afvuurt maakt niet zoveel uit.
De TS zal wel iets slims willen doen met 't IP-adres; een specifieke printer connecten op basis van 't subnet, ofzoiets

QnJhaGlld2FoaWV3YQ==

Pagina: 1