none
Export in CSV-Datei RRS feed

  • Frage

  • Hi there,

     

    I have tehe following question.

    I would like to get the folder size of different servers, calculate it and write that output into a variable. I used the following statement to do so. Unfortuanetely, I do not get alle the values in the $result, just the last one. How can I get all the values?

    foreach($server in $servers)
    {
    $colItems = @((Get-ChildItem \\$server\e$\Logfiles -recurse | Measure-Object -property length -sum))
    
    foreach ($item in $colItems)
    {
    $result= @("{0:N0}" -f ($item.sum / 1MB) | Foreach-object {$_ -replace ",", ""} |)
    }
    }
    

     Thanks in advance

    Florian


    Freitag, 27. Januar 2012 09:20

Antworten

  • > in einer CSV Datei landen und zwar am besten im Format "$server1;$server2;$serverx"

    Das ist natürlich kein Problem. Anstatt des Hashtables erstellen wir einfach einen String mit den Werten und Semikolons dazwischen und schreiben das Ganze als "*.csv"

     

    foreach($server in $servers) { 	
    	$result  += ( "{0:N0}" -f  ((Get-ChildItem \\$server\test  -recurse | Measure-Object -property length -sum).sum / 1MB)) + ";" 
    }
    $result= ($result.Substring(0,($result.Length-1)))  # entferne überflüssiges Trennzeichnen amEnde
    Set-Content "d:\myfile.csv" $result 
    

     

    Grüße, Denniver

     

     


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".

    Montag, 30. Januar 2012 13:56
    Moderator

Alle Antworten

  • Hello Florian,

    If you have declared $result as an array, then you can add value with the += operator. With = you only assign a value to a scalar variable.


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing
    Freitag, 27. Januar 2012 17:26
  • Hallo Florian, aus deinem Namen schließe ich mal das du Deutsch sprichst:

    Mir ist noch nicht klar was denn das gewünschte Ergbniss ist. So wie dein Code bisher aussieht, würdest du (wenn er funktionieren würde :) ) nämlich hinterher einfach eine Liste von Zahlen zurückbekommen, ohne Bezug zum Server /Verzeichnis. Ist es das was du willst? Wie wärs mit einer Tabelle, mit Servername und Verzeichnisgröße:

    $result = @{} # Hashtable anlegen
    
    foreach($server in $servers) {
    	# erstelle für jeden Server einen Hashtable Eintrag mit dem Servernamen
    	$result.$server  +=  "{0:N0}" -f  ((Get-ChildItem \\$server\test  -recurse | Measure-Object -property length -sum).sum / 1MB)
    }
    $result
    
    

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".
    Freitag, 27. Januar 2012 17:56
    Moderator
  • Hallo Denniver,

    das ist richtig, ich spreche Deutsch. Dann können wir das Ganze ja auf Deutsch weiter verfolgen.

    Vielleicht kurz eine Erklärung zum Script. Ich lese die Größe eines Verzeichnisses von allen Servern aus der Variable $servers aus. Der Name ist mir dabei egal, da ich wirklich nur die Größe benötige. Diese sollte, wenn alles so läuft wie ich mir das vorstelle, in einer CSV Datei landen und zwar am besten im Format "$server1;$server2;$serverx" | out-file summary.csv

    Dabei will ich möglichst versuchen keinen Servernamen verwenden zu müssen, so dass eine Änderung in der Variable $servers ausreicht um diese Aktion für alle darin befindlichen Server durchzuführen.

    Vielen Dank für die Hilfe

     

    Grüße

    Florian
    Montag, 30. Januar 2012 13:22
  • > in einer CSV Datei landen und zwar am besten im Format "$server1;$server2;$serverx"

    Das ist natürlich kein Problem. Anstatt des Hashtables erstellen wir einfach einen String mit den Werten und Semikolons dazwischen und schreiben das Ganze als "*.csv"

     

    foreach($server in $servers) { 	
    	$result  += ( "{0:N0}" -f  ((Get-ChildItem \\$server\test  -recurse | Measure-Object -property length -sum).sum / 1MB)) + ";" 
    }
    $result= ($result.Substring(0,($result.Length-1)))  # entferne überflüssiges Trennzeichnen amEnde
    Set-Content "d:\myfile.csv" $result 
    

     

    Grüße, Denniver

     

     


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".

    Montag, 30. Januar 2012 13:56
    Moderator
  • Hallo Florian,

     

    Wir gehen davon aus, dass die Antwort von Denniver Dir weitergeholfen hat.

    Wenn ja, wäre es hilfreich wenn Du diese Lösung bestätigen würdest, sodass andere Leute von derselben Situation profitieren können.
    Wenn nein, neue Rückfragen oder Ergänzungen zu diesem Thread bleiben weiterhin möglich.

     

    Danke und viele Grüße,
    Alex


    Alex Pitulice, MICROSOFT 
    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.

    • Als Antwort markiert Flohschm Montag, 27. Februar 2012 10:55
    • Tag als Antwort aufgehoben Flohschm Montag, 27. Februar 2012 10:56
    Freitag, 3. Februar 2012 10:54