Durchführen von Netzwerkaufgaben

Dieses Beispiel gilt nur für Windows-Plattformen.

Weil TCP/IP das am häufigsten verwendete Netzwerkprotokoll ist, geht es bei den meisten Aufgaben zur grundlegenden Netzwerkprotokollverwaltung um TCP/IP. In diesem Abschnitt werden PowerShell und WMI verwendet, um diese Aufgaben auszuführen.

Auflisten der IP-Adressen für einen Computer

Um alle IP-Adressen abzurufen, die auf dem lokalen Computer verwendet werden, verwenden Sie den folgenden Befehl:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true |
    Select-Object -ExpandProperty IPAddress

Da es sich bei der IPAddress-Eigenschaft eines Win32_NetworkAdapterConfiguration-Objekts um ein Array handelt, müssen Sie den ExpandProperty-Parameter von Select-Object verwenden, um die gesamte Liste der Adressen anzuzeigen.

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

Mithilfe des Cmdlets Get-Member können Sie sehen, dass die IPAddress-Eigenschaft ein Array ist:

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;}

Die „IPAdress“-Eigenschaft für jede Netzwerkkarte ist tatsächlich ein Array. Die geschweiften Klammern in der Definition kennzeichnen, dass IPAddress kein System.String-Wert ist, sondern ein Array von System.String-Werten.

Auflisten von IP-Konfigurationsdaten

Um die detaillierten IP-Konfigurationsdaten für jede Netzwerkkarte anzuzeigen, verwenden Sie den folgenden Befehl:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true

Die Standardanzeige für das Konfigurationsobjekt einer Netzwerkkarte ist ein sehr eingeschränkter Satz der verfügbaren Informationen. Für eine ausführliche Überprüfung und Problembehandlung verwenden Sie das Cmdlet Select-Object oder ein Formatierungs-Cmdlet wie z. B. Format-List, um die anzuzeigenden Eigenschaften anzugeben.

In einem modernen TCP/IP-Netzwerk sind IPX- oder WINS-Eigenschaften wahrscheinlich nicht von Interesse. Sie können den Parameter ExcludeProperty von Select-Object verwenden, um Eigenschaften auszublenden, die mit „WINS“ oder „IPX“ beginnen.

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true |
    Select-Object -ExcludeProperty IPX*,WINS*

Dieser Befehl gibt detaillierte Informationen zu DHCP, DNS, Routing und einigen unwesentlicheren IP-Konfigurationseigenschaften zurück.

Pingen von Computern

Sie können einen einfachen Ping zu einem Computer ausführen, indem Sie Win32_PingStatus verwenden. Der folgende Befehl führt den Ping aus, gibt jedoch eine ausführliche Ausgabe zurück:

Get-CimInstance -Class Win32_PingStatus -Filter "Address='127.0.0.1'"

Eine nützlichere Form für Zusammenfassungsinformationen ist eine Anzeige der Eigenschaften „Address“, „ResponseTime“ und „StatusCode“, wie sie vom folgenden Befehl generiert wird. Der Autosize-Parameter von Format-Table bewirkt eine Breitenänderung der Tabellenspalten, sodass diese ordnungsgemäß in PowerShell angezeigt werden.

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

Ein StatusCode von 0 weist auf einen erfolgreichen Pingvorgang hin.

Sie können ein Array verwenden, um mehrere Computer mit einem einzigen Befehl zu pingen. Da es mehrere Adressen gibt, verwenden Sie das Cmdlet ForEach-Object, um jede Adresse einzeln zu pingen:

'127.0.0.1','localhost','bing.com' |
  ForEach-Object -Process {
    Get-CimInstance -Class Win32_PingStatus -Filter ("Address='$_'") |
      Select-Object -Property Address,ResponseTime,StatusCode
  }

Mit dem gleichen Befehlsformat können Sie alle Adressen in einem Subnetz pingen, beispielsweise in einem privaten Netzwerk, in dem die Netzwerknummer 192.168.1.0 und eine standardmäßige Klasse-C-Subnetzmaske (255.255.255.0) verwendet wird. Nur Adressen im Bereich von 192.168.1.1 bis 192.168.1.254 sind zulässige lokale Adressen (0 ist immer für die Netzwerknummer reserviert, und 255 ist eine Subnetz-Broadcastadresse).

Um ein Array der Zahlen von 1 bis 254 in PowerShell darzustellen, verwenden Sie die Anweisung 1..254. Ein kompletter Subnetz-Ping kann durchgeführt werden, indem jeder Wert im Bereich zu einer Teiladresse in der ping-Anweisung hinzugefügt wird:

1..254| ForEach-Object -Process {
  Get-CimInstance -Class Win32_PingStatus -Filter ("Address='192.168.1.$_'") } |
    Select-Object -Property Address,ResponseTime,StatusCode

Diese Vorgehensweise zum Generieren eines Adressbereichs kann auch an jeder anderen Stelle verwendet werden. Sie können einen vollständigen Satz von Adressen auf diese Weise generieren:

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

Abrufen von Netzwerkadaptereigenschaften

Wie bereits erwähnt, können Sie allgemeine Konfigurationseigenschaften über die Klasse Win32_NetworkAdapterConfiguration abrufen. Netzwerkadapterinformationen wie MAC-Adressen und Kartentypen sind zwar keine TCP/IP-Informationen, können aber trotzdem nützlich sein, um zu verstehen, was mit einem Computer los ist. Um eine Zusammenfassung dieser Informationen zu erhalten, verwenden Sie den folgenden Befehl:

Get-CimInstance -Class Win32_NetworkAdapter -ComputerName .

Zuweisen der DNS-Domäne für einen Netzwerkadapter

Wenn Sie die DNS-Domäne für die automatische Namensauflösung zuweisen möchten, verwenden Sie die Methode SetDNSDomain von Win32_NetworkAdapterConfiguration. Der Query-Parameter von Invoke-CimMethod akzeptiert eine WQL-Abfragezeichenfolge. Das Cmdlet ruft die angegebene Methode für jede von der Abfrage zurückgegebene Instanz auf.

$wql = 'SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=True'
$args = @{ DnsDomain = 'fabrikam.com'}
Invoke-CimMethod -MethodName SetDNSDomain -Arguments $args -Query $wql

Die Filterung nach IPEnabled=True ist notwendig, da selbst in einem Netzwerk, das nur TCP/IP verwendet, einige der Netzwerkadapterkonfigurationen auf einem Computer keine echten TCP/IP-Adapter sind. Dabei handelt es sich um allgemeine Softwareelemente, die RAS, VPN, QoS und andere Dienste für alle Adapter unterstützen und die daher keine eigene Adresse besitzen.

Ausführen von DHCP-Konfigurationsaufgaben

Ein Ändern von DHCP-Details umfasst das Arbeiten mit einem Satz von Netzwerkkarten, ähnlich wie dies bei der DNS-Konfiguration der Fall ist. Es gibt eine Reihe unterschiedlicher Aktionen, die Sie mit WMI ausführen können.

Ermitteln der DHCP-fähigen Netzwerkadapter

Um die DHCP-fähigen Netzwerkkarten auf einem Computer zu ermitteln, verwenden Sie den folgenden Befehl:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=$true"

Wenn Sie Netzwerkkarten mit IP-Konfigurationsproblemen ausschließen möchten, können Sie so vorgehen, dass Sie nur IP-fähige Netzwerkkarten abrufen:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=$true and DHCPEnabled=$true"

Abrufen von DHCP-Eigenschaften

Da DHCP-bezogene Eigenschaften für einen Adapter grundsätzlich mit DHCP beginnen, können Sie den Property-Parameter von Format-Table verwenden, um ausschließlich diese Eigenschaften anzuzeigen:

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

Aktivieren von DHCP auf jedem Netzwerkadapter

Wenn Sie DHCP auf allen Netzwerkkarten aktivieren möchten, verwenden Sie den folgenden Befehl:

$wql = 'SELECT * from Win32_NetworkAdapterConfiguration WHERE IPEnabled=True and DHCPEnabled=False'
Invoke-CimMethod -MethodName ReleaseDHCPLease -Query $wql

Mithilfe der Filteranweisung IPEnabled=True and DHCPEnabled=False wird vermieden, dass DHCP aktiviert wird, wenn es bereits aktiviert ist.

Freigeben und Erneuern von DHCP-Leases auf bestimmten Netzwerkadaptern

Instanzen der Win32_NetworkAdapterConfiguration-Klasse weisen ReleaseDHCPLease- und RenewDHCPLease-Methoden auf. Beide werden auf die gleiche Weise verwendet. Üblicherweise verwenden Sie diese Methoden, wenn Sie nur Adressen für eine Netzwerkkarte in einem bestimmten Subnetz freigeben oder erneuern müssen. Die einfachste Möglichkeit zum Filtern von Netzwerkkarten in einem Subnetz besteht darin, nur die Netzwerkkartenkonfigurationen auswählen, die das Gateway für das Subnetz verwenden. Beispielsweise gibt der folgende Befehl alle DHCP-Leases auf Netzwerkkarten des lokalen Computers frei, die DHCP-Leases von 192.168.1.254 erhalten:

$wql = 'SELECT * from Win32_NetworkAdapterConfiguration WHERE DHCPServer="192.168.1.1"'
Invoke-CimMethod -MethodName ReleaseDHCPLease -Query $wql

Die einzige Änderung zum Erneuern einer DHCP-Lease besteht in der Verwendung der RenewDHCPLease-Methode anstelle der ReleaseDHCPLease-Methode:

$wql = 'SELECT * from Win32_NetworkAdapterConfiguration WHERE DHCPServer="192.168.1.1"'
Invoke-CimMethod -MethodName RenewDHCPLease -Query $wql

Hinweis

Wenn Sie diese Methoden auf einem Remotecomputer verwenden, sollten Sie daran denken, dass der Zugriff auf das Remotesystem verloren gehen kann, wenn die Verbindung mit dem System über die Netzwerkkarte mit der freigegebenen oder erneuerten Lease besteht.

Freigeben und Erneuern von DHCP-Leases auf allen Netzwerkadaptern

Sie können globale DHCP-Adressfreigaben oder -erneuerungen auf allen Netzwerkkarten ausführen, indem Sie die Win32_NetworkAdapterConfiguration-Methoden ReleaseDHCPLeaseAll und RenewDHCPLeaseAll verwenden. Allerdings muss der Befehl auf die WMI-Klasse statt auf eine bestimmte Netzwerkkarte angewendet werden, weil globales Freigeben und Erneuern von Leases für die Klasse, nicht für eine bestimmte Netzwerkkarte ausgeführt wird. Das Cmdlet Invoke-CimMethod kann die Methoden einer Klasse aufrufen.

Invoke-CimMethod -ClassName Win32_NetworkAdapterConfiguration -MethodName ReleaseDHCPLeaseAll

Sie können das gleiche Befehlsformat verwenden, um die RenewDHCPLeaseAll-Methode aufzurufen:

Invoke-CimMethod -ClassName Win32_NetworkAdapterConfiguration -MethodName RenewDHCPLeaseAll

Erstellen einer Netzwerkfreigabe

Um eine Netzwerkfreigabe zu erstellen, verwenden Sie die Create-Methode von 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'
}

Dies entspricht dem folgenden net share-Befehl unter Windows:

net share tempshare=c:\temp /users:25 /remark:"test share of the temp folder"

Um eine Methode einer WMI-Klasse aufzurufen, die Parameter benötigt, müssen Sie wissen, welche Parameter verfügbar sind und welche Typen diese Parameter aufweisen. Beispielsweise können Sie die Methoden der Win32_Class mit den folgenden Befehlen auflisten:

(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}

Verwenden Sie den folgenden Befehl, um die Parameter der Create-Methode aufzulisten.

(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}

Sie können auch die Dokumentation zur Create-Methode der Klasse Win32_Share lesen.

Entfernen einer Netzwerkfreigabe

Sie können eine Netzwerkfreigabe mit Win32_Share entfernen, aber der Vorgang unterscheidet sich etwas vom Erstellen einer Freigabe, weil Sie die bestimmte zu entfernende Instanz anstelle der Win32_Share-Klasse abrufen müssen. Mit dem folgenden Beispiel wird die Freigabe TempShare gelöscht:

$wql = 'SELECT * from Win32_Share WHERE Name="TempShare"'
Invoke-CimMethod -MethodName Delete -Query $wql

Verbinden eines für Windows verfügbaren Netzlaufwerks

Mit dem Cmdlet New-PSDrive kann ein PowerShell-Laufwerk erstellt werden, das einer Netzwerkfreigabe zugeordnet ist.

New-PSDrive -Name "X" -PSProvider "FileSystem" -Root "\\Server01\Public"

Auf diese Weise erstellte Laufwerke sind jedoch nur in der PowerShell-Sitzung verfügbar, in der sie erstellt wurden. Um ein Laufwerk zuzuordnen, das außerhalb von PowerShell (oder für andere PowerShell-Sitzungen) verfügbar ist, müssen Sie den Persist-Parameter verwenden.

New-PSDrive -Persist -Name "X" -PSProvider "FileSystem" -Root "\\Server01\Public"

Hinweis

Dauerhaft zugeordnete Laufwerke sind möglicherweise nicht verfügbar, wenn sie in einem Kontext mit erhöhten Rechten ausgeführt werden. Dies ist das Standardverhalten der Windows-Benutzerkontensteuerung (UAC). Weitere Informationen finden Sie im folgenden Artikel: