Jump to content

Powershell Out-File Ausgabe anpassen


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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ß

Link zu diesem Kommentar

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ß

Link zu diesem Kommentar

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ß

Link zu diesem Kommentar

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 von asta46
Link zu diesem Kommentar

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 von asta46
Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar

Ä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)"

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...