For logging purposes, I needed to get the ethernet ip address for a system. I could parse
ipconfig
, using regex to find the address based on my subnet, or the simple powershell way with
Get-NetIPAddress
.
To make things a bit easier, and to avoid issues where your ip address is not what is expected, you could use one of the following:
((Get-NetIPAddress | Where-Object InterfaceAlias -match Ethernet) `
| Where-Object AddressFamily -Match IPv4).IPAddress
((Get-NetIPAddress | Where-Object InterfaceAlias -match Ethernet) `
| Where-Object AddressFamily -Match IPv6).IPAddress
((Get-NetIPAddress | Where-Object InterfaceAlias -match Wi-Fi) `
| Where-Object AddressFamily -Match IPv4).IPAddress
((Get-NetIPAddress | Where-Object InterfaceAlias -match Wi-Fi) `
| Where-Object AddressFamily -Match IPv6).IPAddress
Obviously, your mileage may vary. For instance, the system I am on now does not obtain IPv6 addresses. My target system does.
How does this work?
Get-NetIPAddress
returns an object with all of your ip addresses; ethernet, wi-fi, loopback, vpn, vm adapters, etc. You may not be interested in all of these. In my case, I am only interested in the IPv4 ethernet address of a system.
Get-NetIPAddress
gets me all interfaces.
Get-NetIPAddress | Where-Object InterfaceAlias -match Ethernet
on my IPv4/IPv6 system gives me:
IPAddress : aa11::bb22:cc33:dd44:ee55%4
InterfaceIndex : 4
InterfaceAlias : Ethernet
AddressFamily : IPv6
Type : Unicast
PrefixLength : 64
PrefixOrigin : WellKnown
SuffixOrigin : Link
AddressState : Preferred
ValidLifetime : Infinite ([TimeSpan]::MaxValue)
PreferredLifetime : Infinite ([TimeSpan]::MaxValue)
SkipAsSource : False
PolicyStore : ActiveStore
IPAddress : 192.168.0.2
InterfaceIndex : 4
InterfaceAlias : Ethernet
AddressFamily : IPv4
Type : Unicast
PrefixLength : 24
PrefixOrigin : Dhcp
SuffixOrigin : Dhcp
AddressState : Preferred
ValidLifetime : 21:43:14
PreferredLifetime : 21:43:14
SkipAsSource : False
PolicyStore : ActiveStore
To break this down and get just the IPv4 entry, we pipe our expression again through a new
Where-Object
:
(Get-NetIPAddress | Where-Object InterfaceAlias -match Ethernet) `
| Where-Object AddressFamily -Match IPv4
IPAddress : 192.168.0.2
InterfaceIndex : 4
InterfaceAlias : Ethernet
AddressFamily : IPv4
Type : Unicast
PrefixLength : 24
PrefixOrigin : Dhcp
SuffixOrigin : Dhcp
AddressState : Preferred
ValidLifetime : 21:43:14
PreferredLifetime : 21:43:14
SkipAsSource : False
PolicyStore : ActiveStore
To get just the IPv4 address, enclose the entire expression, and then request the property desired.
((Get-NetIPAddress | Where-Object InterfaceAlias -match Ethernet) `
| Where-Object AddressFamily -Match IPv4).IPAddress
192.168.0.2