Gli amministratori IT possono fare molto con PowerShell e la riga di comando; lavorare con la rete Windows è uno di quei modi. In questo tutorial, imparerai come utilizzare PowerShell per ottenere gli indirizzi IP dagli adattatori di rete su un computer Windows con il cmdlet Get-NetIPAddress
e WMI.
Prerequisiti
Questo tutorial supporrà che tu sia su un computer Windows 10 o successivo con Windows PowerShell v5.1 installato. Si presume anche che tu sia in un ambiente Active Directory. In caso contrario, assicurati di informarti sulla proprietà Credential
sul cmdlet New-CimSession
.
Utilizzo di Get-NetIPAddress
PowerShell dispone di vari cmdlet per lavorare con le connessioni di rete, come Get-NetAdapter
, Get-NetAdapterBinding
, e persino uno specifico per trovare gli indirizzi IP chiamato Get-NetIPAddress
. Se vuoi utilizzare PowerShell per ottenere l’indirizzo IP in uno script semplice, sentiti libero di utilizzare questi cmdlet.
Mantienilo semplice. Se PowerShell offre un modo più semplice per fare qualcosa, fallo!
Ad esempio, per trovare l’indirizzo IPv4 su tutti gli adattatori di rete su un computer locale, esegui una singola linea.

L’output sopra fa riferimento a un adattatore di rete specifico come l’adattatore Ethernet e restituisce solo l’indirizzo IP.

Hai finito! Utilizzare semplicemente PowerShell per ottenere un indirizzo IP è un processo diretto, almeno molto più semplice che utilizzare altri mezzi.
Se non sei un fan di PowerShell, puoi anche utilizzare il comando ipconfig per ottenere un indirizzo IP. Guarda di più su ipconfig su Comandi Ipconfig Che Devi Conoscere.
Perché utilizzare CIM/WMI?
Quando esegui il cmdlet Get-NetIPAddress
, PowerShell sta effettivamente interrogando WMI per recuperare quelle informazioni. Perché è importante sapere questo? Perché puoi interrogare direttamente WMI tu stesso. Ma perché usare WMI quando puoi usare un singolo comando?
Uno dei motivi più comuni per utilizzare WMI invece di un singolo comando come Get-NetIPAddress
è quando stai già interrogando WMI. WMI contiene moltissime informazioni di sistema che sono utili quando si costruiscono script per scopi di inventario.
Quando comunichi con WMI con PowerShell, puoi creare una sessione CIM molto simile a una sessione di PSRemoting. Utilizzare una sessione è un modo efficiente per autenticarsi su un computer una volta e riutilizzare quella connessione ripetutamente.
Usa CIM per ottenere un indirizzo IP quando stai costruendo questo compito come parte di uno script più grande.
Interrogare CIM Senza una Sessione
Quando stai costruendo uno script PowerShell utilizzando CIM per interrogare varie informazioni, dovresti utilizzare una sessione CIM riutilizzabile. Riutilizzare una singola sessione non solo velocizza lo script ma riduce anche la duplicazione del codice.
Per esempio, forse vorresti scoprire quale sistema operativo sta eseguendo un computer Windows remoto. CIM conserva il nome del sistema operativo in una proprietà chiamata Caption all’interno della classe Win32_OperatingSystem. Per ottenere queste informazioni, utilizzerebbe il Get-CimInstance
cmdlet qui sotto, specificando il nome del computer (REMOTECOMPUTER
), la classe CIM (Win32_OperatingSystem
), e facendo riferimento solo alla proprietà Caption
sull’oggetto.
Quando esegui Get-CimInstance
, PowerShell deve individuare il computer remoto, passargli le credenziali di accesso e infine interrogare CIM per le informazioni di cui hai bisogno. C’è molto overhead associato all’esecuzione di Get-CimInstance
senza una sessione.
E se stai creando uno script per l’inventario del server e vuoi anche trovare informazioni su archiviazione, memoria, networking e così via? In tal caso, avresti molti comandi Get-CimInstance
come quelli sotto.
Il tuo script si connetterà a REMOTECOMPUTER
quattro volte nel frammento di codice sopra, e se il nome del computer cambia? Dovrai trovare/sostituire quel nome del computer, il che non è mai un buon segno durante la codifica.
Creazione di una sessione CIM
Invece di utilizzare Get-CimInstance
con una sessione, dovresti creare una singola sessione CIM con il New-CimSession
cmdlet e riutilizzare quella sessione ripetutamente.
Invece di autenticarti continuamente su un computer remoto, crea una singola sessione CIM con New-CimSession
e passa quella sessione a Get-CimInstance
come segue.
Una volta finito con la sessione, disconnettiti e rimuovila dalla memoria.
Utilizzare sessioni CIM come descritto sopra è un ottimo modo per lavorare con CIM/WMI.
Trovare l’Adattatore di Rete Corretto
Dato che un computer Windows può avere diversi adattatori di rete, devi prima restringere a quale adattatore di rete desideri ottenere l’indirizzo IP. Quando si utilizza WMI, utilizza la classe Win32_NetworkAdapterConfiguration. Questa classe fornisce gran parte delle informazioni restituite da Get-NetIPAddress
.
Prima, crea uno script PowerShell con il nome del computer remoto, crea una nuova sessione CIM e quindi aggiungi la riga per rimuovere la sessione CIM sotto di essa.
Dopo aver costruito il codice della sessione CIM, inserisci la query WMI.

Puoi vedere che l’output predefinito sopra non mostra l’indirizzo IP. Dovrai scavare un po’ più a fondo. Inoltre, non restituisce un’unica istanza. Come puoi restringere quella che ha l’indirizzo IP che stai cercando?
Per farlo, prima visualizza tutte le proprietà utilizzando Select-Object
.
Scorri l’output e noterai alcuni adattatori di rete senza un indirizzo IP, alcuni con uno e alcuni con più IP! Devi limitare questo. Devi trovare un criterio standard su cui filtrare in modo che possa essere applicato a tutti i server.

Su ciascun adattatore, dovresti vedere la proprietà IPEnabled
. Quando questa proprietà è impostata su True, il protocollo TCP/IP è vincolato a questa scheda di rete, il che è un prerequisito per avere un indirizzo IP. Devi restringere le NIC che hanno la proprietà IPEnabled
impostata su True, e avrai l’adattatore che stai cercando.
Quando si filtrano le istanze WMI, è meglio usare il parametro Filter
su Get-CimInstance
. C’è un motto nella comunità PowerShell che dice “filtra a sinistra”. Se hai la possibilità, questo detto significa sempre filtrare l’output il più possibile a sinistra.
Non utilizzare Where-Object
a meno che non sia necessario. Le prestazioni saranno molto più veloci a causa della mancanza di overhead di elaborazione di oggetti non necessari attraverso il pipeline.
Il parametro Filter
su Get-CimInstance
utilizza Windows Query Language (WQL). WQL è un piccolo sottoinsieme di SQL. Il parametro Filter
si aspetta la stessa sintassi di clausola di vincolo WHERE come farebbe SQL.
Per trovare tutte le istanze CIM della classe Win32_NetworkAdapterConfiguration con la proprietà IPEnabled impostata su True, utilizza la query WQL SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'True'
.
Poiché stiamo già specificando il nome della classe per l’argomento del parametro ClassName
in Get-CimInstance
, è necessario specificare IPEnabled = 'True'
per il Filter
. Ciò restituirà solo l’adattatore di rete con l’indirizzo IP.
Quando esegui il frammento di codice sopra, dovresti notare che Get-CimInstance
restituisce solo un’istanza singola (o un insieme limitato) di istanze.
Ora che hai un’unica istanza CIM e conosci la proprietà che stai cercando (IPAddress
), vediamo com’è fatta. Vedrai che, in questo caso, restituisce un’unica istanza CIM ma con tre stringhe per la proprietà IPAddress
, compresi gli indirizzi IPV6.
Dovrai filtrare ulteriori elementi. Poiché WQL non può filtrare più a fondo del valore della proprietà IPAddress
, devi ora analizzare l’indirizzo IPv4.
L’indirizzo IPV4 è tipicamente il primo definito nell’array. Prendilo utilizzando il riferimento all’indice 0 come mostrato di seguito. Quando lo fai, vedrai che restituisce solo una singola stringa di indirizzo IP IPV4.
L’indirizzo IPV4 potrebbe non essere sempre il primo elemento dell’array. In effetti, la proprietà IPAddress potrebbe non essere nemmeno un array. Le configurazioni IP variano drasticamente tra adattatori e varie configurazioni. Potresti dover essere creativo nel filtrarle.
Conclusione
Se hai bisogno di utilizzare PowerShell per ottenere un indirizzo IP da un computer, guarda prima il cmdlet Get-NetIPAddress
. Se stai costruendo uno script più grande o non puoi eseguire questo comando per qualche motivo, considera l’uso di Get-CimInstance
e della sessione CIM per fare il lavoro sporco.
Source:
https://adamtheautomator.com/powershell-get-ip-address/