2014-12-03 4 views

risposta

8

Se utilizzo il nome della macchina, questo funziona. Ma è un po 'come un hack (perché sto solo raccogliendo il primo valore di indirizzo IPv4 che ricevo.)

$ipaddress=([System.Net.DNS]::GetHostAddresses('PasteMachineNameHere')|Where-Object {$_.AddressFamily -eq "InterNetwork"} | select-object IPAddressToString)[0].IPAddressToString 

Nota che si deve sostituire il valore PasteMachineNameHere nell'espressione sopra

Anche questo funziona

$localIpAddress=((ipconfig | findstr [0-9].\.)[0]).Split()[-1] 
15

Che ne dici di questo? (Non il mio vero Indirizzo IP!)

PS C:\> $ipV4 = Test-Connection -ComputerName (hostname) -Count 1 | Select IPV4Address 

PS C:\> $ipV4 

IPV4Address             
----------- 
192.0.2.0 

noti che usare localhost sarebbe solo tornare e IP 127.0.0.1 oggetto Indirizzo

PS C:\> $ipV4 = Test-Connection -ComputerName localhost -Count 1 | Select IPV4Address 

PS C:\> $ipV4 

IPV4Address                
-----------             
127.0.0.1 

L'IP deve essere ampliata fuori per ottenere la stringa indirizzo

PS C:\> $ipV4 = Test-Connection -ComputerName (hostname) -Count 1 | Select -ExpandProperty IPV4Address 

PS C:\> $ipV4 

Address   : 556228818 
AddressFamily  : InterNetwork 
ScopeId   : 
IsIPv6Multicast : False 
IsIPv6LinkLocal : False 
IsIPv6SiteLocal : False 
IsIPv6Teredo  : False 
IsIPv4MappedToIPv6 : False 
IPAddressToString : 192.0.2.0 


PS C:\> $ipV4.IPAddressToString 
192.0.2.0 
+1

Ci sono indirizzi IP specificatamente r eservato per esempi/documentazione (192.0.2.0/24, 198.51.100.0/24,203.0.113.0/24) https://tools.ietf.org/html/rfc5737 – spuder

+2

'$ ip = (Test-Connessione -ComputerName (nome host) - Conta 1) .IPV4Address.IPAddressToString' – gvee

+1

È possibile evitare di chiamare un'utility esterna con '(hostname)' utilizzando la variabile di ambiente '$ env: COMPUTERNAME', ad esempio' Test-Connection $ env: COMPUTERNAME -Count 1 | Seleziona IPV4Address'. – Livven

5

Ecco quello che ho finito per usare

$ipaddress = $(ipconfig | where {$_ -match 'IPv4.+\s(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' } | out-null; $Matches[1]) 

ripartiti come

  • comando ipconfig eseguire - ottenere tutte le informazioni di interfaccia di rete
  • uso PowerShell di cui filtro con un'espressione regolare
  • espressione regolare trova la linea con "IPv4" e una serie di 4 blocchi ciascuno con 1-3 cifre separati da punti, ossia un indirizzo IP v4
  • disinteresse l'uscita da inviando a NULL
  • infine ottenere il primo gruppo corrispondente come definito dalle staffe nell'espressione regolare.
  • catturare quell'output in $ ipaddress per un uso successivo.
3

Ecco un'altra soluzione:

$env:HostIP = (` 
    Get-NetIPConfiguration | ` 
    Where-Object { ` 
     $_.IPv4DefaultGateway -ne $null ` 
     -and ` 
     $_.NetAdapter.Status -ne "Disconnected" ` 
    } ` 
).IPv4Address.IPAddress 
3

Un'altra variante utilizzando variabili $env ambiente per afferrare hostname:

Test-Connection -ComputerName $env:computername -count 1 | Select-Object IPV4Address 

o se volete semplicemente l'indirizzo IP restituito senza l'intestazione di proprietà

(Test-Connection -ComputerName $env:computername -count 1).IPV4Address.ipaddressTOstring