Condividi tramite


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: