jfish
Goto Top

Transponieren wiederholen

Hallo,
Ich habe via Psexec mehrere Server ausgelesen und das Ergebnis in ein Log geschrieben. Der Inhalt im Excel sieht dann so wie unten unter IST. Wie kann ich das Transponieren automatisieren, so das Ergebnis wie unter SOLL (für über 400 Systeme) aussieht.
Danke
Jens

IST:
Hostname srv1
cpu 2
os w2k3
archit 32bit
Hostname srv5
cpu 1
os w2k8
archit 32bit
Hostname srv20
cpu 4
os w2k3
archit 64bit
Hostname srv10
cpu 2
os w2k3
archit 32bit
Hostname srv11
cpu 2
os w2k3
archit 32bit

SOLL:
Hostname CPU OS Aricht
srv4 1 unix 32bit
Kommentar vom Moderator Biber am Jun 09, 2011 um 18:38:05 Uhr
Beitrag verschoben von "Excel" nach "Scriptkrams".
Und auf "erledigt" gesetzt.

Content-Key: 167786

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

Printed on: April 16, 2024 at 10:04 o'clock

Mitglied: 60730
60730 Jun 09, 2011 at 11:48:28 (UTC)
Goto Top
Moin,

Ich habe via Psexec mehrere Server ausgelesen und das Ergebnis in ein Log geschrieben.
  • aha face-wink
Der Inhalt im Excel sieht dann so wie unten unter IST. Wie kann ich das Transponieren automatisieren, so das Ergebnis wie unter SOLL (für über 400 Systeme) aussieht.

Zwei / drei Zeilen:

Ich hab es lieber, wenn man schreibt:
  • Mit der Befehlskette habe ich dieses Ergebnis bekommen.
echo hier könnte deine Befehlskette stehen
  • und dann finde ich es äußert unelegant sich via xyz eine Liste mit sortierung abcde anzufertigen und die dann mit 123 zu 0815xyz umzustricken.

Ergo?
Anstatt beim Versuch einer Transponieren wiederholen zu transpirieren, gleich richtig machen.
Member: bastla
bastla Jun 09, 2011 at 12:06:39 (UTC)
Goto Top
Hallo jfish!

Grundsätzlich sehe ich das auch so wie T-Mo ...

... aber wenn Du die Datensammlung jetzt schon mal hast, könntest Du sie in Excel per VBA etwa so importieren:
Sub Importieren()
Datei = "D:\Server.log"  
AbZeile = 1
AbSpalte = 1 'Spalte A  
Ueber = Array("Hostname", "cpu", "os", "archit") 'Schreibweise der Feldnamen exakt wie in der Datei  
Delim = " "  

Cells(AbZeile, AbSpalte).Resize(1, UBound(Ueber) + 1).Value = Ueber
Zeile = AbZeile + 1
Daten = Split(CreateObject("Scripting.FileSystemObject").OpenTextFile(Datei).ReadAll, vbCrLf)  

Spalten = UBound(Ueber) + 1
i = 0
Do
    If InStr(Daten(i), Ueber(0)) > 0 Then
        For j = 0 To Spalten - 1
            Cells(Zeile, AbSpalte + j).Value = Replace(Daten(i + j), Ueber(j) & Delim, "")  
        Next
        Zeile = Zeile + 1
        i = i + Spalten
    Else
        i = i + 1
    End If
Loop While i <= UBound(Daten)
End Sub
Mit "Delim" in Zeile 6 ist das Trennzeichen zwischen der Feldbezeichnung ("Hostname") und dem Wert ("srv1") gemeint - lt Deinem Beispiel gehe ich von einem Leerzeichen aus; wäre es ein TAB, müsste die Zeile lauten:
Delim = vbTab
Dass es je "Hostname" immer die gleich Anzahl an Feldern (Zeilen in der Logdatei) gibt, setze ich mal voraus ...

Grüße
bastla
Member: jfish
jfish Jun 09, 2011 at 13:23:35 (UTC)
Goto Top
Hi bastla,

danke, hat geholfen.

Gruß