Jump to content
Sign in to follow this  
asta46

Powershell Out-File Ausgabe anpassen

Recommended Posts

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ß

Share this post


Link to post
Share on other sites

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ß

Share this post


Link to post
Share on other sites

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ß

Share this post


Link to post
Share on other sites

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ß!!

Edited by asta46

Share this post


Link to post
Share on other sites

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??

Edited by asta46

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte überlege Dir, ob es nicht sinnvoller ist ein neues Thema zu erstellen.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

Werbepartner:



×
×
  • Create New...