Poiché TCP/IP è il protocollo di rete più comunemente utilizzato, la maggior parte delle attività di amministrazione dei protocolli di rete a basso livello richiede l'utilizzo di TCP/IP. In questa sezione verranno utilizzati Windows PowerShell e Strumentazione gestione Windows (WMI) per eseguire queste attività.
Visualizzazione dell'elenco degli indirizzi IP di un computer
Per ottenere tutti gli indirizzi IP utilizzati nel computer locale, utilizzare il comando seguente:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Format-Table -Property IPAddress
L'output di questo comando si differenzia dalla maggior parte degli elenchi di proprietà perché i valori sono racchiusi tra parentesi graffe:
IPAddress
---------
{192.168.1.80}
{192.168.148.1}
{192.168.171.1}
{0.0.0.0}
Per comprendere i motivi della visualizzazione delle parentesi graffe, utilizzare il cmdlet Get-Member per esaminare la proprietà IPAddress:
PS> Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Get-Member -Name IPAddress
TypeName: System.Management.ManagementObject#root\cimv2\Win32_NetworkAdapter
Configuration
Name MemberType Definition
---- ---------- ----------
IPAddress Property System.String[] IPAddress {get;}
La proprietà IPAddress di ogni scheda di rete corrisponde in realtà a una matrice. Nella definizione le parentesi graffe indicano che IPAddress non è un valore System.String, ma una matrice di valori System.String.
Visualizzazione dei dati di configurazione IP
Per visualizzare dati di configurazione IP dettagliati per ogni scheda di rete, utilizzare il comando seguente:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName .
La visualizzazione predefinita dell'oggetto configurazione delle schede di rete include solo una parte minima delle informazioni disponibili. Per la risoluzione dei problemi e un'analisi approfondita, utilizzare Select-Object o un cmdlet di formattazione come Format-List per specificare le proprietà da visualizzare.
Se non si è interessati alle proprietà IPX o WINS, ad esempio nel caso di una moderna rete TCP/IP, è possibile utilizzare il parametro ExcludeProperty di Select-Object per nascondere le proprietà con nomi che iniziano con "WINS" o "IPX":
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Select-Object -Property [a-z]* -ExcludeProperty IPX*,WINS*
Questo comando restituisce informazioni dettagliate su DHCP, DNS, routing e altre proprietà meno rilevanti per la configurazione IP.
Esecuzione del ping dei computer
È possibile effettuare un semplice ping di un computer tramite Win32_PingStatus. Con il comando seguente viene effettuato il ping, ma viene restituito un output dettagliato:
Get-WmiObject -Class Win32_PingStatus -Filter "Address='127.0.0.1'" -ComputerName .
Un formato più utile per le informazioni di riepilogo prevede la visualizzazione delle proprietà Address, ResponseTime e StatusCode, come vengono generate dal comando seguente. Il parametro Autosize di Format-Table ridimensiona le colonne delle tabelle affinché vengano visualizzate correttamente in Windows PowerShell.
PS> Get-WmiObject -Class Win32_PingStatus -Filter "Address='127.0.0.1'" -ComputerName . | Format-Table -Property Address,ResponseTime,StatusCode -Autosize Address ResponseTime StatusCode ------- ------------ ---------- 127.0.0.1 0 0 A status code of 0 indicates a successful ping.
È possibile utilizzare una matrice per effettuare il ping di più computer con un solo comando. Poiché è presente più di un indirizzo, utilizzare ForEach-Object per effettuare il ping di ogni indirizzo separatamente:
"127.0.0.1","localhost","research.microsoft.com" | ForEach-Object -Process {Get-WmiObject -Class Win32_PingStatus -Filter ("Address='" + $_ + "'") -ComputerName .} | Select-Object -Property Address,ResponseTime,StatusCode
È possibile utilizzare lo stesso formato di comando per effettuare il ping di tutti i computer di una subnet, ad esempio una rete privata che utilizza il numero 192.168.1.0 e una subnet mask di Classe C standard (255.255.255.0). Verranno considerati corretti solo gli indirizzi compresi tra 192.168.1.1 e 192.168.1.254. 0 viene sempre riservato per il numero di rete e 255 corrisponde a un indirizzo di broadcast della subnet.
Per rappresentare una matrice dei numeri compresi tra 1 e 254 in Windows PowerShell, utilizzare l'istruzione 1..254. . In questo modo sarà possibile effettuare un ping della subnet generando la matrice e aggiungendo i valori in un indirizzo parziale nell'istruzione ping:
1..254| ForEach-Object -Process {Get-WmiObject -Class Win32_PingStatus -Filter ("Address='192.168.1." + $_ + "'") -ComputerName .} | Select-Object -Property Address,ResponseTime,StatusCode
Questa tecnica per la generazione di un intervallo di indirizzi può essere utilizzata anche in altri contesti. È possibile generare un set completo di indirizzi nel modo seguente:
$ips = 1..254 | ForEach-Object -Process {"192.168.1." + $_}
Recupero delle proprietà della scheda di rete
Nelle sezioni precedenti di questa documentazione è stato spiegato che è possibile utilizzare Win32_NetworkAdapterConfiguration per recuperare le proprietà di configurazione generali. Sebbene non si riferiscano esattamente a TCP/IP, le informazioni sulle schede di rete, ad esempio gli indirizzi MAC e i tipi di scheda, possono essere utili per comprendere le operazioni in corso in un computer. Per ottenere un riepilogo di queste informazioni, utilizzare il comando seguente:
Get-WmiObject -Class Win32_NetworkAdapter -ComputerName .
Assegnazione del dominio DNS per una scheda di rete
Per assegnare il dominio DNS per la risoluzione dei nomi automatica, utilizzare il metodo Win32_NetworkAdapterConfiguration SetDNSDomain. Poiché il dominio DNS viene assegnato in modo indipendente per ogni configurazione di scheda di rete, è necessario utilizzare un'istruzione ForEach-Object per assegnare il dominio a ogni scheda:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=true -ComputerName . | ForEach-Object -Process { $_. SetDNSDomain("fabrikam.com") }
L'istruzione di filtro "IPEnabled=true" è necessaria perché, persino in una rete che utilizza solo TCP/IP, molte delle configurazioni delle schede di rete in un computer non corrispondono a schede TCP/IP effettive. Si tratta invece di elementi software generici che supportano RAS, PPTP, QoS e altri servizi per tutte le schede e che pertanto non dispongono di un proprio indirizzo.
È possibile filtrare il comando tramite il cmdlet Where-Object, anziché utilizzare il filtro Get-WmiObject .
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -ComputerName . | Where-Object -FilterScript {$_.IPEnabled} | ForEach-Object -Process {$_.SetDNSDomain("fabrikam.com")}
Esecuzione di attività di configurazione DHCP
La modifica dei dettagli DHCP implica l'utilizzo di un set di schede di rete, come nel caso della configurazione DNS. Tramite WMI è possibile eseguire diverse azioni distinte. Nelle sezioni seguenti verranno esaminate alcune delle più comuni.
Individuazione delle schede abilitate per DHCP
Per individuare le schede abilitate per DHCP in un computer, utilizzare il comando seguente:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=true" -ComputerName .
Per escludere le schede con problemi di configurazione IP, è possibile recuperare solo le schede IP:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true and DHCPEnabled=true" -ComputerName .
Recupero delle proprietà di DHCP
Poiché le proprietà correlate a DHCP per una scheda iniziano in genere con "DHCP", è possibile utilizzare il parametro Property di Format-Table per visualizzare solo tali proprietà:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=true" -ComputerName . | Format-Table -Property DHCP*
Attivazione di DHCP in singole schede
Per abilitare DHCP in tutte le schede, utilizzare il comando seguente:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=true -ComputerName . | ForEach-Object -Process {$_.EnableDHCP()}
È possibile utilizzare l'istruzione Filter "IPEnabled=true and DHCPEnabled=false" per evitare di abilitare DHCP nelle schede in cui è già abilitato, anche se la mancata esecuzione di questa operazione non causa errori.
Rilascio e rinnovo dei lease DHCP in schede specifiche
La classe Win32_NetworkAdapterConfiguration dispone dei metodi ReleaseDHCPLease e RenewDHCPLease. Le modalità di utilizzo di entrambi i metodi sono identiche. In generale, utilizzare questi metodi solo quando è necessario rilasciare o rinnovare gli indirizzi per una scheda in una subnet specifica. Per filtrare le schede in una subnet in modo semplice, è possibile scegliere solo le configurazioni di scheda in cui viene utilizzato il gateway per tale subnet. Il comando seguente consente, ad esempio, di rilasciare tutti i lease DHCP nelle schede del computer locale che ottengono lease DHCP da 192.168.1.254:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true and DHCPEnabled=true" -ComputerName . | Where-Object -FilterScript {$_.DHCPServer -contains "192.168.1.254"} | ForEach-Object -Process {$_.ReleaseDHCPLease()}
L'unica modifica necessaria per rinnovare un lease DHCP consiste nell'utilizzare il metodo RenewDHCPLease anziché il metodo ReleaseDHCPLease:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true and DHCPEnabled=true" -ComputerName . | Where-Object -FilterScript {$_.DHCPServer -contains "192.168.1.254"} | ForEach-Object -Process {$_.ReleaseDHCPLease()}
Nota | |
Quando questi metodi vengono utilizzati in un computer remoto, è possibile che l'accesso al sistema remoto venga perso se la connessione è stata effettuata tramite la scheda con il lease rilasciato o rinnovato. |
Rilascio e rinnovo dei lease DHCP in tutte le schede
È possibile rilasciare o rinnovare gli indirizzi DHCP per tutte le schede utilizzando i metodi Win32_NetworkAdapterConfiguration, ReleaseDHCPLeaseAll e RenewDHCPLeaseAll. Il comando deve essere applicato alla classe WMI, anziché a una scheda specifica, poiché il rilascio e il rinnovo di lease a livello globale vengono eseguiti sulla classe e non su una scheda specifica.
È possibile ottenere un riferimento a una classe WMI, anziché istanze di classe, visualizzando l'elenco di tutte le classi WMI, quindi selezionando solo quella desiderata in base al nome. Ad esempio, il comando seguente restituisce la classe Win32_NetworkAdapterConfiguration:
Get-WmiObject -List | Where-Object -FilterScript {$_.Name -eq "Win32_NetworkAdapterConfiguration"}
È possibile considerare l'intero comando come classe, quindi richiamare il metodo ReleaseDHCPAdapterLease. Nel comando seguente, le parentesi che racchiudono gli elementi della pipeline Get-WmiObject e Where-Object inducono Windows PowerShell a valutarli per primi:
( Get-WmiObject -List | Where-Object -FilterScript {$_.Name -eq "Win32_NetworkAdapterConfiguration"} ).ReleaseDHCPLeaseAll()
È possibile utilizzare lo stesso formato di comando per richiamare il metodo RenewDHCPLeaseAll:
( Get-WmiObject -List | Where-Object -FilterScript {$_.Name -eq "Win32_NetworkAdapterConfiguration"} ).RenewDHCPLeaseAll()
Creazione di una condivisione di rete
Per creare una condivisione di rete, utilizzare il metodo Win32_Share Create:
(Get-WmiObject -List -ComputerName . | Where-Object -FilterScript {$_.Name -eq "Win32_Share"}).Create("C:\temp","TempShare",0,25,"test share of the temp folder")
È inoltre possibile creare la condivisione utilizzando net share in Windows PowerShell:
net share tempshare=c:\temp /users:25 /remark:"test share of the temp folder"
Rimozione di una condivisione di rete
Per rimuovere una condivisione di rete, è possibile utilizzare Win32_Share. Il processo è tuttavia leggermente diverso rispetto a quello di creazione perché è necessario recuperare la condivisione specifica da rimuovere, anziché la classe Win32_Share. L'istruzione seguente consente di eliminare la condivisione "TempShare":
(Get-WmiObject -Class Win32_Share -ComputerName . -Filter "Name='TempShare'").Delete()
È anche possibile utilizzare Net share:
PS> net share tempshare /delete tempshare was deleted successfully.
Connessione a un'unità di rete accessibile da Windows
Il cmdlet New-PSDrive crea un'unità di Windows PowerShell. Si tenga comunque presente che le unità create in questo modo sono disponibili unicamente in Windows PowerShell. Per creare una nuova unità di rete, è possibile utilizzare l'oggetto COM WScript.Network. Il comando seguente consente di eseguire il mapping della condivisione \\FPS01\utenti all'unità locale B:
(New-Object -ComObject WScript.Network).MapNetworkDrive("B:", "\\FPS01\users")
È anche possibile utilizzare il comando net use:
net use B: \\FPS01\users
Le unità di cui è stato eseguito il mapping a WScript.Network o net use sono immediatamente disponibili in Windows PowerShell.