Esecuzione di attività di rete
Questo esempio si applica solo alle piattaforme Windows.
Poiché TCP/IP è il protocollo di rete più comunemente usato, la maggior parte delle attività di amministrazione del protocollo di rete di basso livello comporta TCP/IP. In questa sezione si usa PowerShell e WMI per eseguire queste attività.
Elenco di indirizzi IP per un computer
Per ottenere tutti gli indirizzi IP in uso nel computer locale, usare il comando seguente:
Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true |
Select-Object -ExpandProperty IPAddress
Poiché la proprietà IPAddress di un oggetto Win32_NetworkAdapterConfiguration è una matrice, è necessario usare il parametro ExpandProperty di Select-Object
per visualizzare l'intero elenco di indirizzi.
10.0.0.1
fe80::60ea:29a7:a233:7cb7
2601:600:a27f:a470:f532:6451:5630:ec8b
2601:600:a27f:a470:e167:477d:6c5c:342d
2601:600:a27f:a470:b021:7f0d:eab9:6299
2601:600:a27f:a470:a40e:ebce:1a8c:a2f3
2601:600:a27f:a470:613c:12a2:e0e0:bd89
2601:600:a27f:a470:444f:17ec:b463:7edd
2601:600:a27f:a470:10fd:7063:28e9:c9f3
2601:600:a27f:a470:60ea:29a7:a233:7cb7
2601:600:a27f:a470::2ec1
Usando il cmdlet Get-Member
, è possibile notare che la proprietà IPAddress è una matrice:
Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true |
Get-Member -Name IPAddress
TypeName: Microsoft.Management.Infrastructure.CimInstance#root/cimv2/Win32_NetworkAdapterConfiguration
Name MemberType Definition
---- ---------- ----------
IPAddress Property string[] IPAddress {get;}
La proprietà IPAddress per ogni scheda di rete è in realtà una matrice. Le parentesi graffe nella definizione indicano che IPAddress non è un valore System.String, ma una matrice di valori System.String.
Elenco dei dati di configurazione IP
Per visualizzare i dati di configurazione IP dettagliati per ogni scheda di rete, usare il comando seguente:
Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true
La visualizzazione predefinita per l'oggetto di configurazione della scheda di rete è un set molto ridotto delle informazioni disponibili. Per un'ispezione approfondita e la risoluzione dei problemi, usare Select-Object
o un cmdlet di formattazione, ad esempio Format-List
, per specificare le proprietà da visualizzare.
Nelle reti TCP/IP moderne probabilmente non si è interessati alle proprietà IPX o WINS. È possibile usare il parametro ExcludeProperty di Select-Object
per nascondere le proprietà con nomi che iniziano con "WINS" o "IPX".
Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true |
Select-Object -ExcludeProperty IPX*,WINS*
Questo comando restituisce informazioni dettagliate su DHCP, DNS, routing e altre proprietà di configurazione IP secondarie.
Ping dei computer
È possibile eseguire un semplice ping su un computer usando Win32_PingStatus. Il comando seguente esegue il ping, ma restituisce un output lungo:
Get-CimInstance -Class Win32_PingStatus -Filter "Address='127.0.0.1'"
La risposta da Win32_PingStatus contiene 29 proprietà. È possibile usare Format-Table
per selezionare le proprietà più interessanti. Il parametro di ridimensionamento automatico dell'impostazione di Format-Table
ridimensiona le colonne della tabella in modo che vengano visualizzate correttamente in PowerShell.
Get-CimInstance -Class Win32_PingStatus -Filter "Address='127.0.0.1'" |
Format-Table -Property Address,ResponseTime,StatusCode -Autosize
Address ResponseTime StatusCode
------- ------------ ----------
127.0.0.1 0 0
Un codice di stato pari a 0 indica un ping riuscito.
È possibile usare una matrice per eseguire il ping di più computer con un singolo comando. Poiché sono presenti più indirizzi, usare il ForEach-Object
per effettuare il ping di ogni indirizzo separatamente:
'127.0.0.1','localhost','bing.com' |
ForEach-Object -Process {
Get-CimInstance -Class Win32_PingStatus -Filter ("Address='$_'") |
Select-Object -Property Address,ResponseTime,StatusCode
}
È possibile usare lo stesso formato di comando per eseguire il ping di tutti gli indirizzi in una subnet, ad esempio una rete privata che usa il numero di rete 192.168.1.0 e una subnet mask C di classe standard (255.255.255.0). Solo gli indirizzi compresi nell'intervallo compreso tra 192.168.1.1 e 192.168.1.254 sono indirizzi locali legittimi (0 è sempre riservato per il numero di rete e 255 è un indirizzo di trasmissione subnet).
Per rappresentare una matrice di numeri da 1 a 254 in PowerShell, usare l'espressione 1..254
.
È possibile eseguire un ping di subnet completo aggiungendo ogni valore nell'intervallo a un indirizzo parziale nell'istruzione ping:
1..254| ForEach-Object -Process {
Get-CimInstance -Class Win32_PingStatus -Filter ("Address='192.168.1.$_'") } |
Select-Object -Property Address,ResponseTime,StatusCode
Si noti che questa tecnica per generare un intervallo di indirizzi può essere usata anche altrove. È possibile generare un set completo di indirizzi in questo modo:
$ips = 1..254 | ForEach-Object -Process {'192.168.1.' + $_}
Recupero delle proprietà della scheda di rete
In precedenza, è stato indicato che è possibile recuperare le proprietà di configurazione generali usando la classe Win32_NetworkAdapterConfiguration. Sebbene non siano strettamente informazioni TCP/IP, le informazioni sulle schede di rete, ad esempio indirizzi MAC e tipi di scheda, possono essere utili per comprendere cosa sta succedendo con un computer. Per ottenere un riepilogo di queste informazioni, usare il comando seguente:
Get-CimInstance -Class Win32_NetworkAdapter -ComputerName .
Assegnazione del dominio DNS per una scheda di rete
Per assegnare il dominio DNS per la risoluzione automatica dei nomi, usare il metodo SetDNSDomain del Win32_NetworkAdapterConfiguration. Il parametro query di Invoke-CimMethod
accetta una stringa di query WQL. Il cmdlet chiama il metodo specificato in ogni istanza restituita dalla query.
$wql = 'SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=True'
$args = @{ DnsDomain = 'fabrikam.com'}
Invoke-CimMethod -MethodName SetDNSDomain -Arguments $args -Query $wql
È necessario filtrare su IPEnabled=True
, perché anche in una rete che usa solo TCP/IP, diverse configurazioni dell'adattatore di rete in un computer non sono veri adattatori TCP/IP. Sono elementi software generali che supportano RAS, VPN, QoS e altri servizi per tutti gli adattatori e quindi non hanno un indirizzo proprio.
Esecuzione di attività di configurazione DHCP
La modifica dei dettagli DHCP comporta l'uso di un set di schede di rete, proprio come avviene per la configurazione DNS. Esistono diverse azioni distinte che è possibile eseguire usando WMI.
Ricerca di adattatori abilitati per DHCP
Per trovare le schede abilitate per DHCP in un computer, usare il comando seguente:
Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=$true"
Per escludere le schede con problemi di configurazione IP, è possibile recuperare solo schede abilitate per IP:
Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=$true and DHCPEnabled=$true"
Recupero delle proprietà DHCP
Poiché le proprietà correlate a DHCP per un adattatore iniziano in genere con DHCP
, è possibile utilizzare il parametro Property di Format-Table
per visualizzare solo tali proprietà:
Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=$true and DHCPEnabled=$true" |
Format-Table -Property DHCP*
Abilitazione di DHCP su ogni adattatore
Per abilitare DHCP su tutti gli adattatori, usare il comando seguente:
$wql = 'SELECT * from Win32_NetworkAdapterConfiguration WHERE IPEnabled=True and DHCPEnabled=False'
Invoke-CimMethod -MethodName ReleaseDHCPLease -Query $wql
L'uso dell'istruzione filter IPEnabled=True and DHCPEnabled=False
evita di abilitare DHCP in cui è già abilitato.
Rilascio e rinnovo dei lease DHCP su adattatori specifici
Le istanze della classe Win32_NetworkAdapterConfiguration hanno metodi ReleaseDHCPLease
e RenewDHCPLease
. Entrambi vengono usati nello stesso modo. In generale, usare questi metodi se è sufficiente rilasciare o rinnovare gli indirizzi per un adattatore in una subnet specifica. Il modo più semplice per filtrare gli adattatori in una subnet consiste nel scegliere solo le configurazioni dell'adattatore che usano il gateway per tale subnet. Ad esempio, il comando seguente rilascia tutti i contratti di locazione DHCP sugli adattatori nel computer locale che ottengono contratti di locazione DHCP da 192.168.1.254.
$wql = 'SELECT * from Win32_NetworkAdapterConfiguration WHERE DHCPServer="192.168.1.1"'
Invoke-CimMethod -MethodName ReleaseDHCPLease -Query $wql
L'unica modifica per il rinnovo di un lease DHCP consiste nell'usare il metodo RenewDHCPLease
anziché il metodo ReleaseDHCPLease
:
$wql = 'SELECT * from Win32_NetworkAdapterConfiguration WHERE DHCPServer="192.168.1.1"'
Invoke-CimMethod -MethodName RenewDHCPLease -Query $wql
Nota
Quando si usano questi metodi in un computer remoto, tenere presente che è possibile perdere l'accesso al sistema remoto se si è connessi tramite l'adattatore con il lease rilasciato o rinnovato.
Rilascio e rinnovo delle concessioni DHCP su tutte le schede di rete
È possibile eseguire versioni o rinnovi degli indirizzi DHCP globali in tutte le schede usando i metodi di Win32_NetworkAdapterConfiguration, ReleaseDHCPLeaseAll
e RenewDHCPLeaseAll
.
Tuttavia, il comando deve essere applicato alla classe WMI, anziché a un adattatore specifico, perché il rilascio e il rinnovo dei lease vengono eseguiti a livello globale sulla classe, non su un adattatore specifico. Il cmdlet Invoke-CimMethod
può chiamare i metodi di una classe.
Invoke-CimMethod -ClassName Win32_NetworkAdapterConfiguration -MethodName ReleaseDHCPLeaseAll
È possibile usare lo stesso formato di comando per richiamare il metodo RenewDHCPLeaseAll:
Invoke-CimMethod -ClassName Win32_NetworkAdapterConfiguration -MethodName RenewDHCPLeaseAll
Creazione di una condivisione di rete
Per creare una condivisione di rete, usare il metodo Create
di Win32_Share:
Invoke-CimMethod -ClassName Win32_Share -MethodName Create -Arguments @{
Path = 'C:\temp'
Name = 'TempShare'
Type = [uint32]0 #Disk Drive
MaximumAllowed = [uint32]25
Description = 'test share of the temp folder'
}
Equivale al comando net share
seguente in Windows:
net share tempshare=c:\temp /users:25 /remark:"test share of the temp folder"
Per chiamare un metodo di una classe WMI che accetta parametri, è necessario conoscere i parametri disponibili e i tipi di tali parametri. Ad esempio, è possibile elencare i metodi del Win32_Class con i comandi seguenti:
(Get-CimClass -ClassName Win32_Share).CimClassMethods
Name ReturnType Parameters Qualifiers
---- ---------- ---------- ----------
Create UInt32 {Access, Description, MaximumAllowed, Name…} {Constructor, Implemented, MappingStrings, Stati…
SetShareInfo UInt32 {Access, Description, MaximumAllowed} {Implemented, MappingStrings}
GetAccessMask UInt32 {} {Implemented, MappingStrings}
Delete UInt32 {} {Destructor, Implemented, MappingStrings}
Usare il comando seguente per elencare i parametri del metodo Create
.
(Get-CimClass -ClassName Win32_Share).CimClassMethods['Create'].Parameters
Name CimType Qualifiers ReferenceClassName
---- ------- ---------- ------------------
Access Instance {EmbeddedInstance, ID, In, MappingStrings…}
Description String {ID, In, MappingStrings, Optional}
MaximumAllowed UInt32 {ID, In, MappingStrings, Optional}
Name String {ID, In, MappingStrings}
Password String {ID, In, MappingStrings, Optional}
Path String {ID, In, MappingStrings}
Type UInt32 {ID, In, MappingStrings}
È anche possibile leggere la documentazione per metodo Create della classe Win32_Share.
Rimozione di una condivisione di rete
È possibile rimuovere una condivisione di rete con Win32_Share, ma il processo è leggermente diverso dalla creazione di una condivisione, perché è necessario recuperare l'istanza specifica da rimuovere, anziché la classe Win32_Share. Nell'esempio seguente viene eliminata la condivisione TempShare:
$wql = 'SELECT * from Win32_Share WHERE Name="TempShare"'
Invoke-CimMethod -MethodName Delete -Query $wql
Connessione di un'unità di rete accessibile da Windows
Il cmdlet New-PSDrive
può creare un'unità di PowerShell mappata a una condivisione di rete.
New-PSDrive -Name "X" -PSProvider "FileSystem" -Root "\\Server01\Public"
Tuttavia, le unità create in questo modo sono disponibili solo per la sessione di PowerShell in cui vengono create. Per mappare un'unità disponibile all'esterno di PowerShell (o ad altre sessioni di PowerShell), è necessario usare il parametro Persist.
New-PSDrive -Persist -Name "X" -PSProvider "FileSystem" -Root "\\Server01\Public"
Nota
Le unità di rete mappate in modo permanente potrebbero non essere disponibili quando si opera in un contesto con privilegi elevati. Si tratta del comportamento predefinito di Controllo dell'account utente di Windows. Per altre informazioni, vedere l'articolo seguente: