Supportnet Computer
Planet of Tech

Supportnet / Forum / Skripte(PHP,ASP,Perl...)

Powershell ausgabe in Datei





Frage

Guten Tag, ich habe für meinen exchange 2007 Server auf win server 2008 folgendes script geschrieben um die speicherplatznutzung von jedem einzelnen user auszugeben. [code] get-user | Where-Object {$_.Recipienttype -match "UserMailbox"} | ForEach-Object {Get-MailboxFolderStatistics -identity $_.name} | where-object {$_.Name -match "top of information store"} | ForEach-Object {write-host $_.identity $_.folderandsubfoldersize} [/code] frage: wie kann ich die ausgabe in eine Datei umleiten? ich habe es schon mit csv und html umkonvertierungsmöglichkeiten versucht, keine hat aber funktioniert. vielen dank schonmal. mfg hardy114

Antwort 1 von Jaja

du müsstest nur ans ende deiner befehlszeile die umleitung setzen:

... > c:\ausgabe.txt

oder ähnlich..

ich habe 0 ahnung von der powershell, weiß aber das sie so gut wie alle brauchbaren befehle (wie pipes | usw.) aus der unix welt geklaut hat und somit auch die umleitung per > funktionieren sollte.. (ging ja auch schon mit der cmd)

allerdings habe ich auch gehört das im gegensatz zur verhaltensweise von unix/linux shell/programmen die ausgabe der einzelbefehle eben nicht plain text ist sondern eine xml struktur.. welchen vorteil das auch immer bringen mag wird so wohl die gewünschte ausgabe in der datei mit xml tags durchsetzt sein.

wenn ms weit genug gedacht hat müsste es auch ein befehl geben, diese tags aus dem datenstrom auszufiltern und plain text auszugeben oder der operator > macht das schon (was ich nicht glaube).
wenn alle stricke reißen gibts das gnu "sed" (streamline editor) auch als win variante, welcher dir beliebige unerwünschte zeichen (per reg. expr.) auch innerhalb einer pipe ausfiltern kann..

Antwort 2 von hardy114

Hallo Jaja,

vielen dank schonmal.
das mit dem ">" habe ich ausprobiert. da bleibt jedoch die ausgabedatei leer.

Vermutlich liegt das an:

ForEach-Object {write-host $_.identity $_.folderandsubfoldersize}

da das ein reines ausgabeobjekt ist.
dies benötige ich aber um die identity und die foldersize rauszufiltern.

wenn ich diesen teil weglasse kann die die ausgabe exportieren.
aber die ausgabe ist dann recht krüptisch und nicht wirklich zu verwenden.

vielen dank schonmal bis hierhin.

mfg
hardy114

Antwort 3 von Jaja

Zitat:
aber die ausgabe ist dann recht krüptisch und nicht wirklich zu verwenden.


wie ich sehe verwendest du ja "ForEach-Object {write-host $_.identity $_.folderandsubfoldersize}" um die ausgabe zu formatieren.

es gäbe also schon die möglichkeit, die unsortierte (cryptische) ausgabe getrennt von deinem kommando zu formatieren.

probiere doch mal die ausgabe per umleitung > ohne formatierung in eine datei zu leiten und anschließend diese datei wieder einzulesen und die formatierung mit foreach-objekt anchließend vorzunehmen.

sollte das nicht möglich sein könnte das von mit schon angesprochene sed helfen, die ausgabe hilfreich zu filtern/formatieren.

sed

Antwort 4 von hardy114

danke für deine unterstützung, Jaja.

der ex- und inport hat zwar funktioniert. nur erkennt die powershell dann nichtmehr die einzelnen attribute. es wird dann nur noch die stringlänge der zeile zurückgegeben.

zu sed hab ich nichts bestehendes bei der powershell finden können. und installieren tu ich das auf dem server auch recht ungern, sry.

mfg
hardy114

Antwort 5 von Jaja

Zitat:
ur erkennt die powershell dann nichtmehr die einzelnen attribute


ist ja klar, denn dieser xml- müll selbst für die powershell dann nicht mehr lesbar ist ;)
naja, schade.

Zitat:
zu sed hab ich nichts bestehendes bei der powershell finden können


hat man wohl vergessen von gnu/linux zu kopieren ;)

Zitat:
und installieren tu ich das auf dem server auch recht ungern, sry.


ah. nix installieren - ist eine kleine binary, die du irgendwo im suchpfad bzw. aktuellem varbeitsverzeichnis platzieren müsstest. da open source auch 0 risiko..

schau mal hier

in der tat doch einige kleine abhängigkeiten durch .dll die im system untergebracht werden müssten, wenn nicht schon verhanden- naja. andere tipps kann ich dir leider nicht geben, das konzept der powershell ist halt leider irgendwie nicht zuende gedacht worden.

Antwort 6 von Arno_Nym

Ich kann den speziellen Befehl jetzt nicht so genau nachvollziehen (kein Ex2k7 greifbar), aber IMHO schreibt das Pshell-Cmdlet "write-host" nur in ein Ausgabe-/Hostfenster und nicht in eine Pipe. Deshalb ist auch keine Umleitung mit >> möglich (Datei bleibt daher leer).

Es müßte also statt write-host eher "write-output" verwendet werden, oder das Tee-Object, oder Out-File.
(siehe z.B. get-help tee-object, get-help out-file).

Arno

Antwort 7 von hardy114

Guten Morgen,

danke soweit, Jaja, aber ich versuche erstmal ohne sed weiterzukommen.

@Arno_Nym: gute idee, ich habe mal mit write-output und verwanten methoden gearbeitet. ergebnis: ein 1KB grosses file mit einem zeilenumbruch.

mehr gibts leider nicht.

Ich habe heute auch nochmal versucht das ganze problem in excel zu lösen. (was ich eigentl nicht wollte, weil ich am ende des scripts gern eine fertige liste hätte)

Ausgabe wäre dann folgende:

01.10.2008 12:12:03,"Top of Information Store",username\,/,LgAAAACWsH6o8kHiQK1KSPv5BOZeAQD83/F/QiujSa0aLN9NRCpyAABR0epxAAAB,Root,0,0B,15059,731054704B,,,


Den User auszulesen wäre nicht das problem aber die anzahl der verbrauchten byte. (hier: 731054704B) da eine suche "von rechts" nötig wäre.

vielen dank soweit.

mfg
hardy114

Antwort 8 von hardy114

kleines update:

ich habe mal "write-host" durch "out-file" ersetzt.


get-user | Where-Object {$_.Recipienttype -match "UserMailbox"} | ForEach-Object {Get-MailboxFolderStatistics -identity $_.name} | where-object {$_.Name -match "top of information store"} | ForEach-Object { out-file -filepath C:\ausgabe.txt -append -inputObject $_.identity}


ich dachte: wenn ich das einfach ersetze und per inputObject sage dass ich die identity ausgeben möchte sollte es funktionieren.
leider nein. es werden immer nur zeilenumbrüche ausgegeben.
bei write-host funktioniert es.

das interessante:$_.name kann ich in die textdatei ausgeben. nur $_.identity und $_.folderandsubfoldersize nicht.

ich hoffe das hilft.

vielen dank soweit!

mfg
hardy114

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: