Microsoft MVPs inside





 MCSEboard.de – IT Pro Forum zu Windows Server 2008 R2 / 2008 / 2003 & Windows 7 / Vista / XP
Registrieren Hilfe Regeln Benutzerliste Suchen Heutige Beiträge Alle Foren als gelesen markieren

Windows Forum — Scripting


Alles zum Thema System Administration Scripting — Q & A zum Thema Scripting: Batch, VBS, WMI, PowerShell


Antwort
     
Themen-Optionen
Alt 19.12.2011, 16:39   #1
Newbie
 
Offline
Registriert seit: 12-2011
Beiträge: 8
Powershell Out-File Ausgabe anpassen

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ß
    Mit Zitat antworten
Alt 19.12.2011, 19:14   #2
Board Veteran
 
Offline
Registriert seit: 12-2008
Beiträge: 4.674
Sicher ist das möglich. Woher kommt den der Code? Wie viel Erfahrung hast du mit Powershell?
    Mit Zitat antworten
Alt 19.12.2011, 19:41   #3
Newbie
 
Offline
Registriert seit: 12-2011
Beiträge: 8
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ß
    Mit Zitat antworten
Alt 19.12.2011, 21:40   #4
Moderator
 
Offline
Registriert seit: 11-2002
Beiträge: 6.666
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

Signatur
www.powershellpraxis.de

Nec Cupias, Nec Metuas

    Mit Zitat antworten
Alt 20.12.2011, 11:02   #5
Newbie
 
Offline
Registriert seit: 12-2011
Beiträge: 8
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ß
    Mit Zitat antworten
Alt 20.12.2011, 11:21   #6
Moderator
 
Offline
Registriert seit: 11-2002
Beiträge: 6.666
mal 1. auf die Schnelle

"{0,$($width_0):0.0}" -f `
$(100*$PercentFree)

Signatur
www.powershellpraxis.de

Nec Cupias, Nec Metuas

    Mit Zitat antworten
Alt 20.12.2011, 15:23   #7
Newbie
 
Offline
Registriert seit: 12-2011
Beiträge: 8
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ß!!

Geändert von asta46 (20.12.2011 um 15:55 Uhr).
    Mit Zitat antworten
Alt 20.12.2011, 16:36   #8
Newbie
 
Offline
Registriert seit: 12-2011
Beiträge: 8
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??

Geändert von asta46 (20.12.2011 um 17:07 Uhr).
    Mit Zitat antworten
Alt 20.12.2011, 19:58   #9
Moderator
 
Offline
Registriert seit: 11-2002
Beiträge: 6.666
Probiers mal damit

Code:
$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

Signatur
www.powershellpraxis.de

Nec Cupias, Nec Metuas

    Mit Zitat antworten
Alt 20.12.2011, 20:24   #10
Newbie
 
Offline
Registriert seit: 12-2011
Beiträge: 8
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
    Mit Zitat antworten
Antwort


Themen-Optionen


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Powershell 2.0 - Ausgabe weiter verarbeiten Eddi85 Windows Forum — Scripting 2 13.12.2011 11:52
Powershell Ausgabe abgeschnitten Skarden Windows Forum — Scripting 2 08.07.2011 12:51
Powershell Ausgabe formatieren majoo MS Exchange Forum 5 09.12.2010 10:29
c# string anpassen für Ausgabe BlackShadow Windows Forum — Scripting 2 22.04.2009 15:27


Alle Zeitangaben in MEZ/CET. Es ist jetzt 15:18 Uhr. Seite generiert in 0,043 Sekunden.

- Unsere Partner -

Copyright © 2000 – 2012 MCSEboard.de

Sprung zum Seitenanfang