Esecuzione di attività di rete

Questo esempio si applica solo alle piattaforme Windows.

Poiché TCP/IP è il protocollo di rete usato più di frequente, è coinvolto nella maggior parte delle attività di basso livello per l'amministrazione dei protocolli di rete. In questa sezione si useranno 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 utilizzare 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 Get-Member cmdlet è 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 effetti 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 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 configurazione della scheda di rete è un set molto ridotto delle informazioni disponibili. Per controlli più approfonditi 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 non si sarà probabilmente 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 sulle proprietà DHCP, DNS, di routing e su 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'"

Un formato più utile per le informazioni di riepilogo è una visualizzazione delle proprietà Address, ResponseTime e StatusCode, come quella generata dal comando seguente. Il parametro Autosize di Format-Table ridimensiona le colonne della tabella in modo da visualizzarle 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

Il valore 0 per StatusCode indica un ping con esito positivo.

Si può usare una matrice per eseguire il ping di più computer con un unico comando. Poiché sono presenti più indirizzi, usare 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 dei 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 la generazione di un intervallo di indirizzi può essere usata anche altrove. In questo modo si può generare un set completo di indirizzi:

$ips = 1..254 | ForEach-Object -Process {'192.168.1.' + $_}

Recupero delle proprietà della scheda di rete

Come accennato in precedenza, è 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 della classe Win32_NetworkAdapterConfiguration. Il parametro Query di accetta una stringa di Invoke-CimMethod 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

L'applicazione di filtri è IPEnabled=True necessaria, perché anche in una rete che usa solo TCP/IP, diverse configurazioni della scheda di rete in un computer non sono vere schede TCP/IP. sono elementi software generali che supportano RAS, VPN, QoS e altri servizi per tutte le schede e quindi non hanno un indirizzo proprio.

Esecuzione di attività di configurazione DHCP

Per la modifica dei dettagli relativi a DHCP occorre lavorare su un set di schede di rete, esattamente come per la configurazione DNS. Esistono diverse azioni distinte che è possibile eseguire usando WMI.

Ricerca di schede abilitate 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 le 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 di una scheda di rete in genere iniziano con DHCP, è possibile usare il parametro Property di Format-Table per visualizzare solo le proprietà di questo tipo:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter  "IPEnabled=$true and DHCPEnabled=$true" |
  Format-Table -Property DHCP*

Abilitazione di DHCP in ogni scheda

Per abilitare il protocollo DHCP in tutte le schede, 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 IPEnabled=True and DHCPEnabled=False filter evita di abilitare DHCP in cui è già abilitato.

Rilascio e rinnovo di lease DHCP in schede specifiche

Le istanze della classe Win32_NetworkAdapterConfiguration hanno ReleaseDHCPLease metodi e RenewDHCPLease . Entrambi si usano nello stesso modo. In generale, usare questi metodi se è necessario rilasciare o rinnovare gli indirizzi per una sola scheda in una subnet specifica. Il modo più semplice per filtrare le schede in una subnet è scegliere solo le configurazioni delle schede che usano il gateway della subnet in questione. Ad esempio, il comando seguente rilascia tutti i lease DHCP nelle schede del computer locale che ottengono lease 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 RenewDHCPLease metodo anziché il ReleaseDHCPLease metodo :

$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, se si è connessi al sistema remoto tramite la scheda con il lease rilasciato o rinnovato, si può perdere l'accesso al sistema.

Rilascio e rinnovo di lease DHCP in tutte le schede

È possibile eseguire le versioni globali degli indirizzi DHCP o i rinnovi in tutte le schede usando i metodi ReleaseDHCPLeaseAll di Win32_NetworkAdapterConfiguration e .RenewDHCPLeaseAll Tuttavia, il comando va applicato alla classe WMI e non a una particolare scheda, perché il rilascio o rinnovo globale dei lease viene eseguito sulla classe, non su una specifica scheda. Il Invoke-CimMethod cmdlet può chiamare i metodi di una classe.

Invoke-CimMethod -ClassName Win32_NetworkAdapterConfiguration -MethodName ReleaseDHCPLeaseAll

Si può usare lo stesso formato del 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 Create metodo 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 seguente net share 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 Create metodo .

(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 relativa al 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 un'unità di rete accessibile da Windows

Il New-PSDrive cmdlet 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 eseguire il mapping di 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à mappate in modo permanente potrebbero non essere disponibili durante l'esecuzione 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: