none
Wmi Abfrage mehrerer Computerobjekte und export in csv RRS feed

  • Allgemeine Diskussion

  • Hallo zusammen,

    ich stehe hier für mich vor einer fast unlösbaren Aufgabe.

    Ich habe eine Abfrage die mir die installierte Software eines Servers ausliest.

    wmic /node:"Server" Product GET name,version /format:csv >C:\Temp\AusgabeDateiName.csv

    Das klappt super.. allerdings habe ich über 400 Server in einer Liste, die Servernamen stehen in einer Exceldatei

    die heisst "Servertabelle.xlsm", Tabellenblatt "Serverkonfig" und in der Spalte A.

    Ich möchte jetzt, dass alle Server aus der Spalte A wie oben abgefragt werden, zusätzlich noch den "WMI Status" da ich sehen muss wieso ein Server nicht auslesbar ist.

    Vielen Dank im Vorraus.

    Grüßle

    Snoopy_80


    Dienstag, 6. August 2019 07:17

Alle Antworten

  • Hallo snoopy,

    ich würde das Tabellenplatt als csv speichern.

    Dann kannst du mit:

    $header = "Spalte1","Spalte2", "Spalte3"
    $Server = Import-Csv -Path 'X:\Pfad\Server.csv' -Header $header

    die csv in ein Array importieren.

    Dann musst du nur noch eine for-each Schleife drüber laufen lassen.

    Gruß

    Dienstag, 6. August 2019 07:34
  • Hallo,

    Danke für die Idee mit der CSV, aber die Vorgabe ist nur diese Excel zu verwenden.

    Die Servernamen stehen nur in der Ersten Spalte, ich muss nicht mehrere Spalten Abfragen. Nur die Erste.

    Genau das mit dieser Schleife verstehe ich nicht, mir mangelt es da wirklich an Kenntnis/Vorstellungsvermögen :( .

    Dienstag, 6. August 2019 07:49
  • Man kann natürlich auch aus direkt aus Excel importieren, ist halt mit CSV schöner.

    Aber da es schon an Schleifen scheitert, würde ich dir empfehlen, erstmal Knowhow Aufbau zu betreiben.

    Oder du/ihr bezahlt jmd. dafür, da dieses Forum dafür da ist, bei Lösungen zu helfen, nicht sie komplett zu erarbeiten.

    Als Kurzerklärung:
    Die Schleife nimmt jeden Eintrag, den du vorher in ein Array übergeben hast und führt dann den Code aus, den du ausführen willst.

    foreach ($Eintrag in $xlsspalte1)
    {
    #führe deinen Code aus
    wmic /node:$Eintrag Product GET name,version /format:csv >C:\Temp\AusgabeDateiName.csv
    }

    Viel Spaß beim lernen.

    Gruß


    Dienstag, 6. August 2019 08:04
  • Hallo "unbekannt",

    vielen Dank.. Du hast vollkommen Recht und im Normalfall nehme ich mir auch die Zeit, nur bin ich noch 2 Wochen in dieser Firma und will das fertig abgeben. Hätte ich diesen Zeitdruck nicht würde ich mir jetzt ne kleine online Schulung gönnen. Wenn du wüsstest wie groß meine Excel ist, und die Datenauswertung die dabei entsteht, eigentl. müsste man ein Tool für Inventarisierung kaufen damit man alle Infos bekommt :( .

    Grüßle

    Snoopy_80

    Dienstag, 6. August 2019 09:06
  • Hi,

    auch wenn ich Marcs Antwort bevorzugen würde, kannst Du Dir auch mit Excel direkt behelfen. Wenn der Servername in der Spalte A steht, kannst Du folgendes in die Spalte X eintragen:

    ="wmic /node:"&A1&" Product GET name,version /format:csv >>C:\Temp\AusgabeDateiName.csv"

    Danach kopierst Du die Formel auf alle Zeilen runter. Damit hättest Du den Befehl für jeden Server fertig. Jetzt müsstest Du die Spalte X gesamt kopieren, den Inhalt in Editor einfügen und das Ganze als xxx.cmd abspeichern.

    Beachte bitte dass Du beim Umleiten >> verwendest, damit wird die Ausgabe an die Datei angehängt und nicht überschrieben.

    Grüße,
    Jakša


    Dienstag, 6. August 2019 09:26
  • WMI kann nicht auf Excel zugreifen. Dafür kannst du aber direkt auf Excel zugreifen, falls es installiert ist.
    https://docs.microsoft.com/de-de/powershell/scripting/samples/creating-.net-and-com-objects--new-object-?view=powershell-6

    $Excel = new-object -TypeName Excel.Application

    Dann kannst du via Excel-Objektmodell ein Workbook öffnen und die Zellen auslesen:

    https://social.msdn.microsoft.com/Forums/de-DE/22b11766-6b33-451d-b43c-7596472bcd73/excel-read-using-powershell?forum=scripting

    Dienstag, 6. August 2019 09:44
  • Hallo Jaska,

    Danke für den anderen Ansatz.

    die Tabelle mit den Servernamen ändert sich jede Woche :(

    es kommen dann immer mehr dazu, deswegen die Abfrage der Tabelle direkt. Wenn ich in zwei Wochen hier weg bin, sollen die Kollegen nur eine cmd ausführen und fertig, da macht sich keiner die Mühe und öffnet die Tabelle und kopiert alle Zeilen raus. Traurig aber war! :(

     @marc-sysagmn

    ich habe es eben mit deinen Tips versucht aber ich hab irgendwo einen Denkfehler drin, ich hab es mit der CSV probiert bekomme aber nur Fehler.. es findet den Namen nicht??

    Code:

    $Server = Import-Csv -Path "\\Server\Ordner\Server.csv"

    foreach ($Eintrag in $Server)
    {
    $ServerName = $Eintrag.'Servername'

    wmic /node:$Eintrag Product GET name,version /format:csv >C:\Temp\AusgabeDateiName.csv
    }

    Fehlermedung:

    wmic : "/node:@{PK - Alias wurde nicht gefunden.
    In Zeile:7 Zeichen:1
    + wmic /node:$Eintrag Product GET name,version /format:csv >C:\Temp\Aus ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: ("/node:@{PK ...nicht gefunden.:String) [], RemoteException
        + FullyQualifiedErrorId : NativeCommandError

    Dienstag, 6. August 2019 09:45
  • Ok, in diesem Fall hast Du recht. Ich dachte, das wäre eine einmalige Inventarisierungsangelegenheit.

    Du erstellst eine Variable $ServerName, verwendest diese aber nicht. Ändere die Zeile so ab:
    wmic /node:$ServerName ...

    Du kannst Dir die Variable aber auch komplett sparen:
    wmic /node:$($Eintrag.Servername)...

    Achte außerdem, dass Du die Umleitung der Ausgabe mit >> schreibst, da ansonsten die Datei füe jede Zeile überschrieben wird.

    Dienstag, 6. August 2019 10:05
  • Hallo Jaska,

    Danke für den anderen Ansatz.

    die Tabelle mit den Servernamen ändert sich jede Woche :(

    es kommen dann immer mehr dazu, deswegen die Abfrage der Tabelle direkt. Wenn ich in zwei Wochen hier weg bin, sollen die Kollegen nur eine cmd ausführen und fertig, da macht sich keiner die Mühe und öffnet die Tabelle und kopiert alle Zeilen raus. Traurig aber war! :(

     @marc-sysagmn

    ich habe es eben mit deinen Tips versucht aber ich hab irgendwo einen Denkfehler drin, ich hab es mit der CSV probiert bekomme aber nur Fehler.. es findet den Namen nicht??

    Code:

    $Server = Import-Csv -Path "\\Server\Ordner\Server.csv"

    foreach ($Eintrag in $Server)
    {
    $ServerName = $Eintrag.'Servername'

    wmic /node:$Eintrag Product GET name,version /format:csv >C:\Temp\AusgabeDateiName.csv
    }

    Fehlermedung:

    wmic : "/node:@{PK - Alias wurde nicht gefunden.
    In Zeile:7 Zeichen:1
    + wmic /node:$Eintrag Product GET name,version /format:csv >C:\Temp\Aus ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: ("/node:@{PK ...nicht gefunden.:String) [], RemoteException
        + FullyQualifiedErrorId : NativeCommandError

    $header = "Servername","Spalte2", "Spalte3"
    $Serverlist = Import-Csv -Path 'X:\Pfad\Server.csv' -Header $header
    
    $Server = $Serverlist.Servername
    
    foreach ($Servername in $Server)
    {
    wmic /node:$Servername Product GET name,version /format:csv >>C:\Temp\AusgabeDateiName.csv
    }

    Dienstag, 6. August 2019 10:43
  • Hallo Snoopy_80,

    bist Du inzwischen weitergekommen? Wenn Dir die Tipps geholfen haben, markiere bitte die entsprechenden Beiträge, die zur Lösung geführt haben, als Antworten.

    Wenn Du eine andere Lösung gefunden hast, bitte teile sie der Community mit, sodass auch andere Benutzer davon profitieren können.

    Danke und Grüße,

    Mihaela


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.


    Montag, 26. August 2019 10:54
    Moderator