asta46 10 Geschrieben 19. Dezember 2011 Melden Teilen Geschrieben 19. Dezember 2011 Hallo zusammen, ich bin erst seit kurzem im Bereich Windows Powershell tätig und habe ein Problem, welches ich nicht lösen kann.... Ich hoffe jemand kann sich einen kurzen Moment Zeit nehmen, um mir einen Rat zu geben! Sachverhalt ist folgender....: Ich möchte den folgenden Befehl in eine Datei Ausgeben: Get-PSDrive Die einfache Umleitung in eine Datei habe ich durch Get-PSDrive | Out-File c:\scripts\test.txt erreicht! Nun ist es jedoch so, dass ich eigentlich nur den belegten Speicherplatz in % benötige, und das ganze durch einen Trenner getrennt hinter einem Code stehen soll. Also angenommen der belegte Speicherplatz von C: beträgt prozentual 86% und der von D: 56%, dann soll die Ausgabe innerhalb der Datei nach Möglichkeit folgendermaßen aussehen: 4568:86 --> 4568 stellt hierbei den Code dar... 4556:56 Gibt es überhaupt eine Möglichkeit dies so zu bewerkstelligen?? Ich wäre jedem, der mir helfen kann unendlich dankbar!!!! Besten Dank und Gruß Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 19. Dezember 2011 Melden Teilen Geschrieben 19. Dezember 2011 Sicher ist das möglich. Woher kommt den der Code? Wie viel Erfahrung hast du mit Powershell? Zitieren Link zu diesem Kommentar
asta46 10 Geschrieben 19. Dezember 2011 Autor Melden Teilen Geschrieben 19. Dezember 2011 Nun wie gesagt, ich bin gerade erst eingestiegen in Sachen Powershell... Erfahrung mit Programmieren habe ich lediglich mit C++, Sql und im Bash Scripting... Der Code dient zur internen Weiterverarbeitung und war exemplarisch.... Also völlig losgelöst von Microsoft etc... Im Prinzip solle es also einfach irgendwie möglich sein hinter einen zuvor definierten Code den belegten Festplattenplatz in Prozent in einem File zu speichern... Besten Dank im Voraus und Gruß Zitieren Link zu diesem Kommentar
blub 115 Geschrieben 19. Dezember 2011 Melden Teilen Geschrieben 19. Dezember 2011 Hi, du kannst dir das Beispiel 2a mal ansehen. PowerShell Formatierung des Outputs - PowerShellPraxis.de Statt get-psdrive wird hier nur .Net $drives=[system.io.driveinfo]::getdrives() verwendet. Die ganze Formatierung kannst du ja rausnehmen. blub Zitieren Link zu diesem Kommentar
asta46 10 Geschrieben 20. Dezember 2011 Autor Melden Teilen Geschrieben 20. Dezember 2011 Hallo, also ich habe mir mit Hilfe des Beispiels folgendes gebastelt: $drives=[system.io.driveinfo]::getdrives() $width_0=13 $drives | foreach { if ($_.totalsize -gt 0){ $Totalsize=$($_.totalsize)/1GB $TotalFreeSpace=$($_.totalfreespace)/1GB $PercentFree=$($_.totalfreespace)/$($_.totalsize) "{0,$($width_0):0.0%}" -f ` $PercentFree }} Die Ausgabe sieht dann wie folgt aus: 22,7% 76,0% 42,0% Nun stehe ich vor weiteren Schwierigkeiten: 1. Wie kriege ich das % Zeichen aus der Ausgabe entfernt, 2. Einen Zeitstempel eingefügt, im Format 20111220100101 -->Jahr/Monat/Tag/Uhrzeit 3. und schlussendlich folgende Ausgabe als Ergebnis in ein File geschrieben?: 20111220100101 9908, 22,7 --> Codes sind wieder exemplarisch, frei gewählt und dienen zur internen Identifikation 9909, 76,0 9910, 42,0 Soweit schon einmal besten Dank für die Hilfe... ich hoffe jemand kann mir auf den letzten Metern noch ein wenig Hilfestellung leisten! Dank und Gruß Zitieren Link zu diesem Kommentar
blub 115 Geschrieben 20. Dezember 2011 Melden Teilen Geschrieben 20. Dezember 2011 mal 1. auf die Schnelle "{0,$($width_0):0.0}" -f ` $(100*$PercentFree) Zitieren Link zu diesem Kommentar
asta46 10 Geschrieben 20. Dezember 2011 Autor Melden Teilen Geschrieben 20. Dezember 2011 (bearbeitet) Also ich bin dank der Tips schon ein ganzes Stück weiter... die Ausgabe passt inzwischen dahingehend, dass Zeitstempel und belegter Platz korrekt angezeigt werden. Lediglich der vorangestellt Code fehlt noch und der Export in ein File funktioniert noch nicht.... Weiß hier jemand noch abschließend einen Rat? Bisher sieht der Code folgendermaßen aus: $drives=[system.io.driveinfo]::getdrives() get-date -format yyyyMMddHHmmss $width_0=0 $drives | foreach { if ($_.totalsize -gt 0){ $Totalsize=$($_.totalsize)/1GB $TotalFreeSpace=$($_.totalfreespace)/1GB $PercentFree=$($_.totalfreespace)/$($_.totalsize) "{0,$($width_0):0.0}" -f ` $(100*$PercentFree) }} Wie kann ich die Ausgabe nun via out-file in eine Datei schieben? Wenn ich ein einfaches | Out-File c:\scripts\test.txt hinter die letzte Klammer einfüge, wird lediglich der belegte Plattenplatz geschrieben, nicht jedoch der Zeitstempel.... $drives=[system.io.driveinfo]::getdrives() get-date -format yyyyMMddHHmmss $width_0=0 $drives | foreach { if ($_.totalsize -gt 0){ $Totalsize=$($_.totalsize)/1GB $TotalFreeSpace=$($_.totalfreespace)/1GB $PercentFree=$($_.totalfreespace)/$($_.totalsize) "{0,$($width_0):0.0}" -f ` $(100*$PercentFree) }} | Out-File c:\scripts\test.txt Besten Dank und Gruß!! bearbeitet 20. Dezember 2011 von asta46 Zitieren Link zu diesem Kommentar
asta46 10 Geschrieben 20. Dezember 2011 Autor Melden Teilen Geschrieben 20. Dezember 2011 (bearbeitet) Nachtrag: Habe folgendes geschrieben und dabei ist mir aufgefallen, dass der Code natürlich einen entscheidenden Designfehler hat: $drives=[system.io.driveinfo]::getdrives() get-date -format yyyyMMddHHmmss $width_0=0 $drives | foreach { if ($_.totalsize -gt 0){ $Totalsize=$($_.totalsize)/1GB $TotalFreeSpace=$($_.totalfreespace)/1GB $PercentFree=$($_.totalfreespace)/$($_.totalsize) "7987,", "{0,$($width_0):0.0}" -f ` $(100*$PercentFree) }} #| Out-File c:\scripts\test.txt Ausgabe: 20111220163200 7987, 21,8 7987, 76,0 7987, 42,0 Nun habe ich zwar den Code 7987 voranstehen inkl. Trenner, jedoch natürlich für jedes Laufwerk den gleichen. Allerdings ist es nötig, dass ich für jedes Laufwerk einen eigenen Code definiere..... Und da bin ich nun komplett raus... Muss ich das über einen Zähler lösen, der zB. bei 7987 anfängt zu zählen und dan pro Partition um eins hochzählt? Doch wie kann ich da ansetzen?? bearbeitet 20. Dezember 2011 von asta46 Zitieren Link zu diesem Kommentar
blub 115 Geschrieben 20. Dezember 2011 Melden Teilen Geschrieben 20. Dezember 2011 Probiers mal damit $counter=7978 $filepath="c:\temp\test.txt" $drives=[system.io.driveinfo]::getdrives() get-date -format yyyyMMddHHmmss #Bildschirmausgabe get-date -format yyyyMMddHHmmss| Out-File -filepath $filepath -encoding default #Textausgabe $drives | foreach { if ($_.totalsize -gt 0){ $Totalsize=$($_.totalsize)/1GB $TotalFreeSpace=$($_.totalfreespace)/1GB $PercentFree=$($_.totalfreespace)/$($_.totalsize) $counter+=1 $a="{0},{1:0.0}" -f $($counter),$(100*$PercentFree) $a #Bildschrimausgabe $a | Out-File -filepath $filepath -append -encoding default #Textausgabe }} blub Zitieren Link zu diesem Kommentar
asta46 10 Geschrieben 20. Dezember 2011 Autor Melden Teilen Geschrieben 20. Dezember 2011 Perfekt!!!!! Vielen vielen Dank!!!!! Du hast mir unwahrscheinlich geholfen und ich hab ganz nebenbei eine ganze Menge gelernt!! Nochmal danke schön!! Ein super Forum!!! Beste Grüße Zitieren Link zu diesem Kommentar
blub 115 Geschrieben 20. Dezember 2011 Melden Teilen Geschrieben 20. Dezember 2011 freut mich, wenn's so klappt :) blub Zitieren Link zu diesem Kommentar
asta46 10 Geschrieben 22. Dezember 2011 Autor Melden Teilen Geschrieben 22. Dezember 2011 Hallo zusammen... Ich hab im Nachgreifen nun doch noch eine Frage... Ich kämpfe im Moment noch mit der Formatierung der Ausgabe. Code ist folgender: get-date -format yyyyMMddHHmmss | Out-File -filepath $filepath -encoding default #Zeitstempel $filepath="c:\temp\xyz.txt" #Filepath $counter=0001 $load=Get-WmiObject win32_processor | format-wide -property loadpercentage $b="{0}, {1:0.0}" -f $($counter), $($load) $b | Out-File -filepath $filepath -append -encoding default Ausgabe: 20111222134655 9950, System.Object[] Die aktuelle Cpu Last soll mir dadurch angezeigt werden, allerdings nur der eigentliche Wert. Leider kriege ich diesen nicht entsprechend formatiert, so dass unter anderem obige Ausgabe entsteht.... Die Ausgabe sollte nach Möglichkeit folgendermaßen aussehen: Bei einer angenommenen Cpu Last von 14% 20111222134655 9950, 14 Hat da jmd noch einmal freundlicherweise einen Rat oder Tip für mich??? Besten Dank im Voraus und Gruß asta Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 22. Dezember 2011 Melden Teilen Geschrieben 22. Dezember 2011 Änder mal folgendes $load=Get-WmiObject win32_processor | format-wide -property loadpercentage $b="{0}, {1:0.0}" -f $($counter), $($load) zu: $load=Get-WmiObject win32_processor | Select-Object -property loadpercentage $b="{0}, {1:0.0}" -f $($counter), $($load.loadpercentage) Alternativ: $load=Get-WmiObject win32_processor $b="{0}, {1:0.0}" -f $($counter), $($load.loadpercentage) format-wide ist eher zum Formatieren für die Anzeige (oder wenn man diese 1:1 übernehmen möchte. EDIT: Ach ja. Wenn du keine Dezimalstellen willst darfst du diese in der Ausgabe auch nicht zu Dezimalwerten umwandeln (-> {1:0.0}) Bei einfachen Werten reicht: $b = "$count, $($load.loadpercentage)" Zitieren Link zu diesem Kommentar
asta46 10 Geschrieben 22. Dezember 2011 Autor Melden Teilen Geschrieben 22. Dezember 2011 Super!! Funktioniert!! Vielen vielen Dank.... auch für den Tipp in Sachen Formatierung!!!!! Und wieder sag ichs.... super Forum!!!:D Besten Dank und Gruß asta Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.