ibicis 10 Geschrieben 12. Februar 2013 Melden Teilen Geschrieben 12. Februar 2013 Ich bin mir nicht sicher, ob meine Beschreibung im Titel korrekt ist, deshalb hier nochmal ausführlicher, was ich meine: Ich frage folgendes ab für mehrere Clients im Netzwerk: $ausgabe = "\\localhost\ausgabe.txt" "\\netzwerk-client3\c$\Windows\system.ini" | Out-File $ausgabe -Encoding Default -append Get-Content "\\netzwerk-client3\c$\Windows\system.ini" | select-string -pattern "wave=" -context 0, 0 | Out-File $ausgabe -Encoding Default -append Die Abfrage funktioniert, gibt aber nur die gefundenen Strings aus; der Host-Name, auf dem die Strings gefunden wurden, wird nicht ausgegeben (so wurde es ja in der Abfrage auch definiert): wave=mmdrv.dll Ich möchte gerne, dass der Host-Name mit ausgegeben wird, weshalb ich den String "\\netzwerk-client3\c$\Windows\system.ini" aus Zeile 3 einfach als Ausgabe für Zeile 2 kopierte und einfügte. Die Ausgabe schaut nun so aus: "\\netzwerk-client3\c$\Windows\system.ini" wave=mmdrv.dll Nun zur eigentlichen Frage: Kann ich entweder definieren, dass PS den "hostname" des Ziel-PCs ermittelt und ausgibt (Wenn ja, wie mache ich das?) bzw. wie kann ich PS anweisen, den String, der mit "Get-Content "\\netzwerk-client3\c$\Windows\system.ini"" verknüpft ist, über eine Variable oder eine Anweisung in Zeile 2 oder nach Zeile 3 auszugeben? Zitieren Link zu diesem Kommentar
Timsk 11 Geschrieben 12. Februar 2013 Melden Teilen Geschrieben 12. Februar 2013 (bearbeitet) Hi, wie frägst du denn die einzelnen Computer ab? Möglich wäre es die Computer in einen Array zu definieren. Mittels foreach kannst du dann nach und nach die Computer abfragen. Mittels $computer erhälst du den aktuell abgefragten Computer zurück. Als kleines Beispiel: [array]$computers = "Server1", "Server2" foreach ($computer in $computers) { "\\" + $computer + "\c$\Windows\System.ini" } Hilft Dir das bei deiner ersten Frage weiter? Viele Grüße! bearbeitet 12. Februar 2013 von Timsk Zitieren Link zu diesem Kommentar
ibicis 10 Geschrieben 12. Februar 2013 Autor Melden Teilen Geschrieben 12. Februar 2013 Die Richtung stimmt, nun werden zumindest alle Hosts, die im Array definiert wurden, ausgegeben. Wie kann ich nun obige Ausgabe "\\netzwerk-client3\c$\Windows\system.ini" wave=mmdrv.dll erreichen? Mit { "\\" + $computer + "\c$\Windows\system.ini" | Out-File $ausgabe -Encoding Default -append Get-Content "\\" + $computer + "\c$\Windows\system.ini" | select-string -pattern "wave=" -context 0, 0 | Out-File $ausgabe -Encoding Default -append } geht es nicht. Bzgl. PS-Syntax sieht es bei mir recht mau aus. Ist es generell mgl., die Computer und das Ergebnis von select-string untereinander auszugeben? Zitieren Link zu diesem Kommentar
Timsk 11 Geschrieben 12. Februar 2013 Melden Teilen Geschrieben 12. Februar 2013 (bearbeitet) Hi, Also bei mir funktioniert es folgendermaßen: [array]$computers = "Server1", "Server2" $ausgabe = "C:\temp\test.txt" foreach ($computer in $computers) { "\\" + $computer + "\c$\Windows\system.ini" | Out-File $ausgabe -append gc ("\\" + $computer + "\c$\Windows\system.ini") | select-string -pattern "wave=" -context 0, 0 | Out-File $ausgabe -append } Ist zwar nicht besonders schön formatiert aber es erfüllt seinen Zweck. Eine schönere Formatierung würde man beispielsweise mit einer csv Datei erreichen können. Viele Grüße! Edit: So ist die Ausgabe schöner :) [array]$computers = "Server1", "Server2" $ausgabe = "C:\temp\test.txt" $computers | % { "\\" + $_ + "\c$\Windows\system.ini" | Out-File $ausgabe -append (gc ("\\" + $_ + "\c$\Windows\system.ini") | select-string -pattern "wave=" -context 0, 0).ToString() | Out-File $ausgabe -append } bearbeitet 12. Februar 2013 von Timsk Zitieren Link zu diesem Kommentar
ibicis 10 Geschrieben 12. Februar 2013 Autor Melden Teilen Geschrieben 12. Februar 2013 Ja, so passt es. Die Ausgabe ist nicht schön, aber praktisch. ;) Wenn ich das Ergebnis mit notepad öffne und je ein Leerzeichen durch keinen Character ersetze, passt die Formatierung. Insofern - tausend Dank für deine Hilfe (nicht nur insofern, sondern überhaupt). Generell ist PS relativ übersichtlich und man kann sich einarbeiten. Nur wenn es um Formatierungen geht, artet alles recht schnell in ein Script-Monster aus, welches schwer durchschaubar wird. Zitieren Link zu diesem Kommentar
Sunny61 807 Geschrieben 12. Februar 2013 Melden Teilen Geschrieben 12. Februar 2013 Evtl. findest Du hier eine bessere Formatierung für die Ausgabe: http://technet.microsoft.com/de-de/library/dd347677.aspx Format-Table macht sich ganz gut. ;) Zitieren Link zu diesem Kommentar
Timsk 11 Geschrieben 12. Februar 2013 Melden Teilen Geschrieben 12. Februar 2013 Evtl. findest Du hier eine bessere Formatierung für die Ausgabe: http://technet.microsoft.com/de-de/library/dd347677.aspx Format-Table macht sich ganz gut. ;) Na warum dann nicht gleich die passende Lösung? :) [array]$computers = "Server1", "Server2" $ausgabe = "C:\Temp\Test.txt" $output = @() $computers | % { $temp = "" | Select Computername, Information $temp.Computername = $_ $temp.Information = (gc ("\\" + $_ + "\c$\Windows\system.ini") | select-string -pattern "wave=" -context 0, 0).ToString() $output += $temp } $output | out-File $ausgabe Zitieren Link zu diesem Kommentar
Sunny61 807 Geschrieben 12. Februar 2013 Melden Teilen Geschrieben 12. Februar 2013 Na warum dann nicht gleich die passende Lösung? :) Weil die Leute es sonst nicht lernen und nur abschreiben, bzw. copy + paste machen. Zitieren Link zu diesem Kommentar
ibicis 10 Geschrieben 12. Februar 2013 Autor Melden Teilen Geschrieben 12. Februar 2013 Auch gut, aber ich bevorzuge die Schreibweise der Ergebnisse untereinander, ich finde es übersichtlicher (das ist aber Geschmackssache). Eine andere Frage: Wie kann ich bei einer Ausgabe einen String an eine Zeile ohne Zeilenumbruch anfügen? Bsp., ich gebe Datum und Uhrzeit aus, Dienstag, 12. Februar 2013 16:05:54 möchte aber den String "Uhr" (ohne") an die Ausgabe hängen. Dienstag, 12. Februar 2013 16:05:54 Uhr Ich frage nicht nach Formatierungen a la "-Format u" etc., denn die Standardformatierung genügt mir. Es geht mir prinzipiell um das Anhängen von Strings an eine Ausgabe, ohne in die nächste Zeile umzubrechen. Get-Date ist nur ein Bsp., ich suche generell nach einer Möglichkeit, sowas zu bewerkstelligen. Danke vorab. Zitieren Link zu diesem Kommentar
Timsk 11 Geschrieben 12. Februar 2013 Melden Teilen Geschrieben 12. Februar 2013 (bearbeitet) Hi, mit einen "+" verbindest du die einzelnen Teile. Du kannst einen String mit einen String verbinden oder eben einen in einer variablen gespeicherten String mit einen String. "Hallo, " + "dies ist ein Test" oder $date = (get-date).DayOfWeek "Heute ist " + $date Führe einfach die beiden Befehle die im Codeblock stehen aus, das sollte die Sache klar machen. Wenn du jetzt zum Beispiel aber ein Command wie test-path ausführst müsste das Ganze so aussehen (in Klammern setzen). test-path ("C:\" + $Pfadstück + "\Datei.txt") Viele Grüße! bearbeitet 12. Februar 2013 von Timsk Zitieren Link zu diesem Kommentar
ibicis 10 Geschrieben 13. Februar 2013 Autor Melden Teilen Geschrieben 13. Februar 2013 Vielen Dank für den Tipp. Einfaches aneinanderreihen funktioniert unproblematisch, auch ""Heute ist " + $date" ist nachvollziehbar, aber "$date + " Uhr"" funktioniert offenbar nicht: Das Argument "1" mit dem Wert " Uhr" für "op_Addition" kann nicht in den Typ "System.TimeSpan" konvertiert werden: "Der Wert " Uhr" kann nicht in den Typ "System.TimeSpan" konvertiert werden. Fehler: "Die Eingabezeichenfolge hat das falsche Format."" Zitieren Link zu diesem Kommentar
Timsk 11 Geschrieben 13. Februar 2013 Melden Teilen Geschrieben 13. Februar 2013 (bearbeitet) Hi, bei deinen konkreten Beispiel würde es so klappen, liegt eben daran das in $date kein String gespeichert ist sondern ein Datumsobjekt. $date = get-date "$date" + " Uhr" Alternativ: $date = get-date $date = $date.ToString() $date + " Uhr" Viele Grüße! bearbeitet 13. Februar 2013 von Timsk Zitieren Link zu diesem Kommentar
ibicis 10 Geschrieben 13. Februar 2013 Autor Melden Teilen Geschrieben 13. Februar 2013 Der erste Vorschlag ist viel praktischer und tut genau das, was er soll. Auf die Idee des Auskommentierens hätte ich auch allein durch probieren kommen können, aber ich tat es nunmal nicht. Insofern: :thumb1: 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.