flodsche
Goto Top

Get-WmiObject, nach Netzwerkadapter filtern

Hallo,

ich habe folgendes Script:

$NetworkAdapter = Get-WmiObject Win32_NetworkAdapterConfiguration
$excel = new-object -comobject excel.application
$excel.visible = $true
$workbook = $excel.workbooks.add()
$workbook.workSheets.item(3).delete()
$workbook.WorkSheets.item(2).delete()
$workbook.WorkSheets.item(1).Name = "Netzwerk"  
$sheet = $workbook.WorkSheets.Item("Netzwerk")  
$f = 2
$lineStyle = "microsoft.office.interop.excel.xlLineStyle" -as [type]  
$colorIndex = "microsoft.office.interop.excel.xlColorIndex" -as [type]  
$borderWeight = "microsoft.office.interop.excel.xlBorderWeight" -as [type]  
$chartType = "microsoft.office.interop.excel.xlChartType" -as [type]  
For($b = 1 ; $b -le 4 ; $b++) {
$sheet.cells.item(1,$b).font.bold = $true
$sheet.cells.item(1,$b).borders.ColorIndex = $colorIndex::xlColorIndexAutomatic
$sheet.cells.item(1,$b).borders.weight = $borderWeight::xlMedium }
For($a = 1 ; $a -le 1 ; $a++) {
$sheet.cells.item($a,1).font.bold = $true
$sheet.cells.item($a,1).borders.ColorIndex = $colorIndex::xlColorIndexAutomatic
$sheet.cells.item($a,1).borders.weight = $borderWeight::xlMedium }
$sheet.cells.item(1,1) = "IPv4 Adresse"  
$sheet.cells.item(1,2) = "Subnetzmaske"  
$sheet.cells.item(1,3) = "Standard Gateway"  
$sheet.cells.item(1,4) = "MAC Adresse"  
Foreach($process in $NetworkAdapter) {
$sheet.cells.item($f,1) = $process.IPAddress
$sheet.cells.item($f,2) = $process.IPSubnet
$sheet.cells.item($f,3) = $process.DefaultIPGateway
$sheet.cells.item($f,4) = $process.MACAddress
$x++ } #end foreach
$range = $sheet.usedRange
$range.EntireColumn.AutoFit() | out-null

Jedoch ist in dem Excel-Dokument die Spalte für den Gateway nacher leer.

Nun habe ich das wmi objekt mal ohne Excel und dem drum-herum ausgeführt und hab das hier im Ausgabebereich bekommen:

$colItems = Get-WmiObject Win32_NetworkAdapterConfiguration | where{$_.IPEnabled -eq "true"}  
ForEach($objItem in $colItems)
{
"IP Adresse:" + $objItem.IPAddress  
"Subnetzmaske:" + $objItem.IPSubnet  
"Standard Gateway:" + $objItem.DefaultIPGateway  
"MAC Adresse:" + $objItem.MACAddress  
}
IP Adresse:192.168.***.***
Subnetzmaske:255.255.254.0
Standard Gateway:192.168.***.***
MAC Adresse:C4:34:6B:51:E9:**
IP Adresse:192.168.56.1 fe80::c482:820b:36ef:4918
Subnetzmaske:255.255.255.0 64
Standard Gateway:
MAC Adresse:0A:00:27:00:00:**

Hier gibt es jetzt ja jeden Punkt zweimal (zweiter Netzwerkadapter?) und in Excel gibt er mir immer den zweiten aus, ich benötige aber den ersten?
Wie sag ich dem Powershell-Script nun das er mir bitte den ersten Adapter in Excel schreiben soll?

Danke.

Gruß
Florian

Content-ID: 320503

Url: https://administrator.de/contentid/320503

Ausgedruckt am: 26.11.2024 um 04:11 Uhr

131381
Lösung 131381 10.11.2016 aktualisiert um 09:12:00 Uhr
Goto Top
$colitems.Ipaddress
$colitems.IpSubnet
#...

Gruß
Flodsche
Flodsche 10.11.2016 um 09:16:22 Uhr
Goto Top
Hi,

so simpel... vielen Dank!

gruß
Florian
Flodsche
Flodsche 10.11.2016 aktualisiert um 09:24:30 Uhr
Goto Top
In Verbindung mit Excel, funktioniert das ganze allerdings nicht mehr...

$NetworkAdapter = Get-WmiObject Win32_NetworkAdapterConfiguration | where{$_.IPEnabled -eq "true"}  
$excel = new-object -comobject excel.application
$excel.visible = $true
$workbook = $excel.workbooks.add()
$workbook.workSheets.item(3).delete()
$workbook.WorkSheets.item(2).delete()
$workbook.WorkSheets.item(1).Name = "Netzwerk"  
$sheet = $workbook.WorkSheets.Item("Netzwerk")  
$f = 2
$lineStyle = "microsoft.office.interop.excel.xlLineStyle" -as [type]  
$colorIndex = "microsoft.office.interop.excel.xlColorIndex" -as [type]  
$borderWeight = "microsoft.office.interop.excel.xlBorderWeight" -as [type]  
$chartType = "microsoft.office.interop.excel.xlChartType" -as [type]  
For($b = 1 ; $b -le 4 ; $b++) {
$sheet.cells.item(1,$b).font.bold = $true
$sheet.cells.item(1,$b).borders.ColorIndex = $colorIndex::xlColorIndexAutomatic
$sheet.cells.item(1,$b).borders.weight = $borderWeight::xlMedium }
For($a = 1 ; $a -le 1 ; $a++) {
$sheet.cells.item($a,1).font.bold = $true
$sheet.cells.item($a,1).borders.ColorIndex = $colorIndex::xlColorIndexAutomatic
$sheet.cells.item($a,1).borders.weight = $borderWeight::xlMedium }
$sheet.cells.item(1,1) = "IPv4 Adresse"  
$sheet.cells.item(1,2) = "Subnetzmaske"  
$sheet.cells.item(1,3) = "Standard Gateway"  
$sheet.cells.item(1,4) = "MAC Adresse"  
Foreach($process in $NetworkAdapter) {
$sheet.cells.item($f,1) = $process.IPAddress
$sheet.cells.item($f,2) = $process.IPSubnet
$sheet.cells.item($f,3) = $process.DefaultIPGateway
$sheet.cells.item($f,4) = $process.MACAddress
$x++ } #end foreach
$range = $sheet.usedRange
$range.EntireColumn.AutoFit() | out-null

Nun wird garnichts mehr reingeschrieben.

So hat es funktioniert:
$colItems = Get-WmiObject Win32_NetworkAdapterConfiguration | where{$_.IPEnabled -eq "true"}  
"IP Adresse:" + $colItems.IPAddress  
"Subnetzmaske:" + $colItems.IPSubnet  
"Standard Gateway:" + $colItems.DefaultIPGateway  
"MAC Adresse:" + $colItems.MACAddress  

Habe ich jetzt irgendwas übersehen oder falsch gemacht bei der Excel Version?
131381
131381 10.11.2016 aktualisiert um 09:28:44 Uhr
Goto Top
Wohl noch keinen Kaffee gehabt min Jung face-big-smile?!
Zeile 1 zum Auslesen der Config fehlt in deinem obigen Script ! Bzw du hast die Variable anders benannt
$NetworkAdapter = Get-WmiObject Win32_NetworkAdapterConfiguration | where{$_.IPEnabled -eq "true"}   
$networkadapter

Na machts jetzt Klick ?!

Man sollte vor dem Schreiben immer alles nochmal durchgehen dann wären diese sinnlosen Posts überflüssig!
Flodsche
Flodsche 10.11.2016 um 09:36:05 Uhr
Goto Top
Achso, funktioniert das nicht in Verbindung mit dem Variablen-Namen $NetzwerkAdapter und der Foreach-schleife? Weil ohne das zeigt er die Adressen ja auch an, dachte also die zuordnung stimmt.
131381
131381 10.11.2016 aktualisiert um 09:47:36 Uhr
Goto Top
Och mönsch, du bist echt schwer von Begriff...
Wenn du die Variable anders benennst musst du sie auch mit dem anderen Namen verwenden und darauf zuzugreifen !!!!
$networkadapter.Ipaddress

Btw. Ist dein Skript viel zu umständlich und viel zu lahm mit Excel Com-Automation. Mit Export-CSV wärst du 1000mal schneller am Ziel.
Flodsche
Flodsche 10.11.2016 aktualisiert um 10:17:01 Uhr
Goto Top
Nein, nur unerfahren, arbeite erst seit 2-3 Tagen mit powershell.
War natürlich ein Denkfehler... Dachte dies Zeile "Foreach($process in $NetworkAdapter)" vergibt wieder eine neue variable.
Kenne mich leider nicht aus mit CSV-Export, hab 3 tage für das Script wie es jetzt da steht gebraucht :D

Auf meinem Rechner gibt es jetzt alle Adressen richtig an, doch auf anderen Rechnern steht wieder garnix drin (Mit dem gleichen Script!)
Weißt du woran das liegen könnte? Ich vermute mal die ist ein Bezug auf die erste bzw. Standard Netzwerkkarte oder?
Kann es dann sein das auf den anderen PC's im Netzwerk eine andere Netzwerkkarte verwendet wird oder wieso gibt er dort keine Adressen mehr aus?

Edit: Hab gerade rausgefunden, dass wenn ich auf einem zweiten PC, die Null wieder rausnehme, es dort die Adressen anzeigt, auf einem dritten pc jedoch weder ohne, noch mit nuller nicht.
Gibt es eine Möglichkeit wo er sich selber den richtigen adapter sucht?

Gruß
Florian
131381
Lösung 131381 10.11.2016 aktualisiert um 10:55:51 Uhr
Goto Top
Gibt es eine Möglichkeit wo er sich selber den richtigen adapter sucht?
Ja, einfach per Where-Object den Adapter mit Default-GW rausfiltern:
$adapter = gwmi win32_NetworkadapterConfiguration | ?{$_.IPEnabled -and $_.DefaultIPGateway -ne $null} | select -First 1
$adapter.IpAddress
$adapter.IPSubnet

Kenne mich leider nicht aus mit CSV-Export
Da lässt sich doch ändern, die obige Methode ist jedenfalls nicht zu bevorzugen!
Um einen Export per Export-CSV machen zu können musst du immer ein Objekt mit Eigenschaften haben, das kann man sich schnell zusammenbauen
gwmi win32_NetworkadapterConfiguration | ?{$_.IPEnabled -and $_.DefaultIPGateway -ne $null} | select IPAddress,IPSubnet -First 1 | export-csv "C:\daten.csv" -delimiter ";" -NoType -Encoding UTF8  
Es gibt noch viel zu lernen, aber Fang besser mit den Powershell-Basics an anstatt quer einzusteigen. Excel-COM-Automation ist teilweise sehr hakelig und sollte man nur in absoluten Ausnahmefällen verwenden!
Flodsche
Flodsche 10.11.2016 um 12:06:56 Uhr
Goto Top
Vielen Dank! auf PC2 funktioniert es schonmal.
Ich weiß nicht ob ich mich jetzt in die CSV Export Geschichte reindenken soll, hab diese Zeilen so noch nie gesehen, will euch ja schließlich hier in dem Forum nicht noch ganz verrück machen. :P
131381
131381 10.11.2016 aktualisiert um 12:20:17 Uhr
Goto Top
Zitat von @Flodsche:
Ich weiß nicht ob ich mich jetzt in die CSV Export Geschichte reindenken soll, hab diese Zeilen so noch nie gesehen, will euch ja schließlich hier in dem Forum nicht noch ganz verrück machen. :P
Ein Forum ist kein Ersatz fürs Lernen und Lesen !

will euch ja schließlich hier in dem Forum nicht noch ganz verrück machen. :P
Also erst mal ein paar Tage lesen bevor hier für jede simple Frage, die sich mit einer Seite lesen abfackeln lässt, ein neuer Thread aufgemacht wird!

Ein Meister fällt nicht aus dem Himmel, er muss erst gefüttert werden und das geht am besten wenn man gezielt erst die Grundlagen der Scriptsprache lernt und sich dann Schritt für Schritt weiter arbeitet. Du steigst 10 Etagen zu hoch ein, das kann nur zu einem tiefen Fall und Frust führen.
Flodsche
Flodsche 10.11.2016 um 13:18:45 Uhr
Goto Top
Wahre Worte, werd ich machen. Ich danke dir trotzdem für deine Hilfe!

gruß
Florian