Da TCP/IP das am häufigsten verwendete Netzwerkprotokoll darstellt, stehen die meisten Netzwerkprotokoll-Verwaltungsaufgaben auf niedriger Ebene mit TCP/IP in Zusammenhang. In diesem Abschnitt werden diese Aufgaben mit Windows PowerShell und WMI ausgeführt.
Auflisten von IP-Adressen für einen Computer
Wenn Sie alle auf dem lokalen Computer verwendeten IP-Adressen abrufen möchten, verwenden Sie den folgenden Befehl:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Format-Table -Property IPAddress
Die Ausgabe dieses Befehls unterscheidet sich von den meisten Eigenschaftenlisten, da die Werte in geschweifte Klammern eingeschlossen werden:
IPAddress
---------
{192.168.1.80}
{192.168.148.1}
{192.168.171.1}
{0.0.0.0}
Der Grund für die Verwendung der geschweiften Klammern wird deutlich, wenn Sie mit dem Cmdlet "Get-Member" die IPAddress-Eigenschaft untersuchen:
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;}
Die IPAddress-Eigenschaft jeder Netzwerkkarte bildet eigentlich ein Array. Die geschweiften Klammern in der Definition geben an, dass IPAddress keinen System.String-Wert, sondern ein Array von System.String-Werten darstellt.
Auflisten von IP-Konfigurationsdaten
Mit dem folgenden Befehl können Sie ausführliche IP-Konfigurationsdaten für jede Netzwerkkarte anzeigen:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName .
Die Standardanzeige für das Netzwerkkarten-Konfigurationsobjekt enthält nur einen kleinen Teil der verfügbaren Informationen. Zur ausführlichen Inspektion und zur Problembehandlung verwenden Sie Select-Object oder ein Formatierungs-Cmdlet, z. B. Format-List, um die Eigenschaften anzugeben, die angezeigt werden sollen.
Wenn Sie an den IPX- oder WINS-Eigenschaften nicht interessiert sind (wie es in modernen TCP/IP-Netzwerken wahrscheinlich ist), können Sie mit dem ExcludeProperty-Parameter von Select-Object Eigenschaften ausblenden, deren Namen mit "WINS" oder "IPX" beginnen:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Select-Object -Property [a-z]* -ExcludeProperty IPX*,WINS*
Mit diesem Befehl werden ausführliche Informationen zu DHCP, DNS, Routing und anderen weniger wichtigen IP-Konfigurationseigenschaften angezeigt.
Ausführen von Pingbefehlen
Mit Win32_PingStatus können Sie einen einfachen Pingbefehl für einen Computer ausführen. Mit dem folgenden Befehl wird der Pingbefehl ausgeführt, die Ausgabe ist jedoch relativ umfangreich:
Get-WmiObject -Class Win32_PingStatus -Filter "Address='127.0.0.1'" -ComputerName .
Eine sinnvollere Form von Zusammenfassungsinformationen stellt die Anzeige der Eigenschaften Address, ResponseTime und StatusCode dar, wie mit dem folgenden Befehl generiert. Mit dem Autosize-Parameter von Format-Table ändern Sie die Größe der Tabellenspalten, sodass diese in Windows PowerShell ordnungsgemäß angezeigt werden.
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.
Mit einem Array können Sie einen einzelnen Pingbefehl für mehrere Computer ausgeben. Da mehrere Adressen vorhanden sind, geben Sie den Pingbefehl für jede Adresse mit ForEach-Object einzeln aus:
"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
Mit dem gleichen Befehlsformat können Sie Pingbefehle für alle Computer in einem Subnetz ausgeben, z. B. in einem privaten Netzwerk mit der Netzwerknummer 192.168.1.0 und einer Standardsubnetzmaske der Klasse C (255.255.255.0). Dann sind nur Adressen im Bereich von 192.168.1.1 bis 192.168.1.254 zulässige lokale Adressen (0 ist stets für die Netzwerknummer reserviert, und bei 255 handelt es sich um eine Subnetz-Broadcastadresse).
Mit der Anweisung 1..254. stellen Sie in Windows PowerShell ein Zahlenarray von 1 bis 254 dar. Einen Pingbefehl für das gesamte Subnetz können Sie ausführen, indem Sie das Array generieren und dann die Werte einer Teiladresse in der Pinganweisung hinzufügen:
1..254| ForEach-Object -Process {Get-WmiObject -Class Win32_PingStatus -Filter ("Address='192.168.1." + $_ + "'") -ComputerName .} | Select-Object -Property Address,ResponseTime,StatusCode
Diese Methode zum Generieren eines Adressbereichs kann auch an anderer Stelle verwendet werden. Gehen Sie wie folgt vor, um einen vollständigen Satz von Adressen zu generieren:
$ips = 1..254 | ForEach-Object -Process {"192.168.1." + $_}
Abrufen von Netzwerkkarteneigenschaften
In diesem Handbuch wurde bereits erwähnt, dass mit Win32_NetworkAdapterConfiguration allgemeine Konfigurationseigenschaften abgerufen werden können. Obwohl es sich dabei nicht um TCP/IP-Informationen im engeren Sinn handelt, können Informationen über Netzwerkkarten wie MAC-Adresse und Kartentyp hilfreich für das Verständnis der Vorgänge in einem Computer sein. Eine Zusammenfassung dieser Informationen rufen Sie mit dem folgenden Befehl ab:
Get-WmiObject -Class Win32_NetworkAdapter -ComputerName .
Zuweisen der DNS-Domäne für eine Netzwerkkarte
Zum Zuweisen der DNS-Domäne für die automatische Namensauflösung verwenden Sie die Win32_NetworkAdapterConfiguration SetDNSDomain-Methode. Da Sie die DNS-Domäne für jede Netzwerkkartenkonfiguration einzeln zuweisen, müssen Sie mit einer ForEach-Object-Anweisung jeder einzelnen Karte eine Domäne zuweisen:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=true -ComputerName . | ForEach-Object -Process { $_. SetDNSDomain("fabrikam.com") }
Die Filteranweisung "IPEnabled=true" ist erforderlich, da auch in ausschließlich TCP/IP-basierten Netzwerken für einige Netzwerkkartenkonfigurationen auf Computern keine wirklichen TCP/IP-Karten verwendet werden. Diese stellen allgemeine Softwareelemente dar, die RAS, PPTP, QoS und weitere Dienste für alle Karten unterstützen und somit über keine eigene Adresse verfügen.
Den Befehl können Sie auch mit dem Cmdlet Where-Object filtern, statt den Get-WmiObject -Filter zu verwenden.
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -ComputerName . | Where-Object -FilterScript {$_.IPEnabled} | ForEach-Object -Process {$_.SetDNSDomain("fabrikam.com")}
Durchführen von DHCP-Konfigurationsaufgaben
Wenn Sie die DHCP-Einstellungen ändern, sind an dem Vorgang, wie bei der DNS-Konfiguration, mehrere Netzwerkkarten beteiligt. Bestimmte Aktionen können mit WMI ausgeführt werden, von denen einige häufig verwendete nachfolgend besprochen werden.
Bestimmen von DHCP-fähigen Netzwerkkarten
Wenn Sie die DHCP-aktivierten Karten auf einem Computer suchen möchten, verwenden Sie den folgenden Befehl:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=true" -ComputerName .
Wenn Sie Karten mit IP-Konfigurationsproblemen ausschließen möchten, können Sie auch nur IP-aktivierte Karten abrufen:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true and DHCPEnabled=true" -ComputerName .
Abrufen von DHCP-Eigenschaften
Da DHCP-Eigenschaften für Karten meist mit "DHCP" beginnen, können Sie mit dem Property-Parameter von Format-Table die Anzeige auf diese Eigenschaften beschränken:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=true" -ComputerName . | Format-Table -Property DHCP*
Aktivieren von DHCP für Netzwerkkarten
Wenn Sie DHCP für alle Karten aktivieren möchten, verwenden Sie den folgenden Befehl:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=true -ComputerName . | ForEach-Object -Process {$_.EnableDHCP()}
Mit der Filter-Anweisung "IPEnabled=true and DHCPEnabled=false" können Sie die DHCP-Aktivierung für Fälle vermeiden, in denen DHCP bereits aktiviert wurde. Wenn Sie diesen Schritt auslassen, entstehen jedoch keine Fehler.
Freigeben und Erneuern von DHCP-Leases für bestimmte Netzwerkkarten
Die Win32_NetworkAdapterConfiguration-Klasse verfügt über die ReleaseDHCPLease-Methode und die RenewDHCPLease-Methode. Beide Methoden werden auf die gleiche Weise verwendet. Üblicherweise werden diese verwendet, wenn nur Adressen für eine Netzwerkkarte in einem bestimmten Subnetz freigegeben oder erneuert werden müssen. Wenn Sie Netzwerkkarten in einem Subnetz filtern möchten, wählen Sie am besten nur die Netzwerkkartenkonfigurationen aus, die das Subnetzgateway verwenden. Beispielsweise werden mit dem folgenden Befehl alle DHCP-Leases für die Netzwerkkarten des lokalen Computers freigegeben, die DHCP-Leases von 192.168.1.254 beziehen:
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()}
Der einzige Unterschied zum Erneuern von DHCP-Leases besteht darin, dass statt der ReleaseDHCPLease-Methode die RenewDHCPLease-Methode verwendet wird:
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()}
Hinweis: | |
Wenn Sie diese Methoden für einen Remotecomputer verwenden, mit dem Sie über eine Netzwerkkarte verbunden sind, deren Lease freigegeben oder verlängert werden soll, kann die Verbindung mit dem Remotesystem unterbrochen werden. |
Freigeben und Erneuern von DHCP-Leases für alle Netzwerkkarten
Mit den Win32_NetworkAdapterConfiguration-Methoden ReleaseDHCPLeaseAll und RenewDHCPLeaseAll können Sie DHCP-Adressfreigaben oder -erneuerungen für alle Netzwerkkarten durchführen. Der Befehl muss jedoch auf die WMI-Klasse angewendet werden, nicht auf eine bestimmte Netzwerkkarte, da das Freigeben und Erneuern von Leases für eine Klasse und nicht für eine bestimmte Netzwerkkarte erfolgt.
Einen Verweis auf eine WMI-Klasse anstelle einer Klasseninstanz erhalten Sie, indem Sie alle WMI-Klassen auflisten und anschließend nur den Namen der gewünschten Klasse auswählen. Mit dem folgenden Befehl wird beispielsweise die Win32_NetworkAdapterConfiguration-Klasse zurückgegeben:
Get-WmiObject -List | Where-Object -FilterScript {$_.Name -eq "Win32_NetworkAdapterConfiguration"}
Sie können den gesamten Befehl als Klasse behandeln und für diese anschließend die ReleaseDHCPAdapterLease-Klasse aufrufen. Im folgenden Befehl wird Windows PowerShell durch die Klammern um die Pipelineelemente Get-WmiObject und Where-Object angewiesen, diese zuerst auszuwerten:
( Get-WmiObject -List | Where-Object -FilterScript {$_.Name -eq "Win32_NetworkAdapterConfiguration"} ).ReleaseDHCPLeaseAll()
Mit dem gleichen Befehlsformat können Sie die RenewDHCPLeaseAll-Methode aufrufen:
( Get-WmiObject -List | Where-Object -FilterScript {$_.Name -eq "Win32_NetworkAdapterConfiguration"} ).RenewDHCPLeaseAll()
Erstellen einer Netzwerkfreigabe
Mit der Win32_Share Create-Methode können Sie eine Netzwerkfreigabe erstellen:
(Get-WmiObject -List -ComputerName . | Where-Object -FilterScript {$_.Name -eq "Win32_Share"}).Create("C:\temp","TempShare",0,25,"test share of the temp folder")
Sie können die Freigabe in Windows PowerShell auch mit net share erstellen:
net share tempshare=c:\temp /users:25 /remark:"test share of the temp folder"
Entfernen einer Netzwerkfreigabe
Mit Win32_Share können Sie eine Netzwerkfreigabe entfernen. Dieser Vorgang unterscheidet sich jedoch geringfügig vom Erstellen einer Freigabe, da anstelle der Win32_Share-Klasse genau die Freigabe abgerufen werden muss, die entfernt werden soll. Mit der folgenden Anweisung wird die Freigabe "TempShare" gelöscht.
(Get-WmiObject -Class Win32_Share -ComputerName . -Filter "Name='TempShare'").Delete()
Net share kann ebenfalls verwendet werden:
PS> net share tempshare /delete tempshare was deleted successfully.
Verbinden eines Netzlaufwerks mit Windows-Zugriff
Mit dem Cmdlet New-PSDrive können Sie ein Windows PowerShell-Laufwerk erstellen. Dieses Laufwerk ist jedoch nur für Windows PowerShell verfügbar. Zum Erstellen eines neuen Netzlaufwerks können Sie das WScript.Network-COM-Objekt verwenden. Mit dem folgenden Befehl wird die Freigabe "\\FPS01\users" dem lokalen Laufwerk "B:" zugeordnet:
(New-Object -ComObject WScript.Network).MapNetworkDrive("B:", "\\FPS01\users")
Der Befehl net use kann auch verwendet werden:
net use B: \\FPS01\users
Mit WScript.Network oder "net use" zugeordnete Laufwerke sind in Windows PowerShell sofort verfügbar.