Powershell- Software Versionen Zählen
Moin Moin
Brauch ein wenig Hilfe mit Powershell, da ich so gut wie kein bisschen Powershell kann. Ich möchte von ca. 70 Servern die vorhandene Software auslesen und pro Server Loggen.
Jo. Bis jetzt habe ich so weit ein PS Script, welches Server für Server die Softwareversionen ausliest. Was mir an diesem nicht so gefällt ist, dass ich für den Servernamen eine Variable habe. Diese wird immer um 1 erhöht. Da aber auch mal eine Zahl der Servernamen fehlen kann, ist das eine unschöne Lösung.
Ich möchte es so, dass in einer Schlaufe die Servernamen aus einem Textfile ausgelesen und abgearbeitet werden.
Also im Textfile steht zum Beispiel:
Server1
Server2
Server3
Server5
Das Script arbeitet jetzt einen nach dem anderen Durch. Das Resultat (Diesen Schritt habe ich auch schon) wird unter C:\Temp in ein Logfile das den Servernamen (C:\Temp\Test_Server1.log) trägt, geschrieben. Das ist soweit auch von mir gewünscht.
Im letzten Teil, und an diesem hänge ich gerade fest, möchte ich aus den eben erstellten Logs neue erstellen. Die Namen der Logs soll der Software und deren Version entsprechen (Beispiel: F-Secure_7.1.5.log). Darin enthalten sind die Server, auf denen diese Version läuft.
Bei diesem Teil brauche ich ein wenig hilfe =)
Die Situation ist kompliziert. Weiss kaum wie ich das schreiben soll. Also seid mir nicht böse wenns ein wenig kompliziert geschrieben ist. Bei fragen, fragen ;)
Grüsse
aivilon
Brauch ein wenig Hilfe mit Powershell, da ich so gut wie kein bisschen Powershell kann. Ich möchte von ca. 70 Servern die vorhandene Software auslesen und pro Server Loggen.
Jo. Bis jetzt habe ich so weit ein PS Script, welches Server für Server die Softwareversionen ausliest. Was mir an diesem nicht so gefällt ist, dass ich für den Servernamen eine Variable habe. Diese wird immer um 1 erhöht. Da aber auch mal eine Zahl der Servernamen fehlen kann, ist das eine unschöne Lösung.
Ich möchte es so, dass in einer Schlaufe die Servernamen aus einem Textfile ausgelesen und abgearbeitet werden.
Also im Textfile steht zum Beispiel:
Server1
Server2
Server3
Server5
Das Script arbeitet jetzt einen nach dem anderen Durch. Das Resultat (Diesen Schritt habe ich auch schon) wird unter C:\Temp in ein Logfile das den Servernamen (C:\Temp\Test_Server1.log) trägt, geschrieben. Das ist soweit auch von mir gewünscht.
Im letzten Teil, und an diesem hänge ich gerade fest, möchte ich aus den eben erstellten Logs neue erstellen. Die Namen der Logs soll der Software und deren Version entsprechen (Beispiel: F-Secure_7.1.5.log). Darin enthalten sind die Server, auf denen diese Version läuft.
Bei diesem Teil brauche ich ein wenig hilfe =)
Die Situation ist kompliziert. Weiss kaum wie ich das schreiben soll. Also seid mir nicht böse wenns ein wenig kompliziert geschrieben ist. Bei fragen, fragen ;)
Grüsse
aivilon
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 184016
Url: https://administrator.de/contentid/184016
Ausgedruckt am: 18.11.2024 um 03:11 Uhr
17 Kommentare
Neuester Kommentar
Hi,
hilfreich wäre, wenn du dein script hier mal bekanntgibst, so kann man nicht helfen.
Grundsätzlich: da du einmal nach Server und einmal nach Software sortiert/Gruppiert haben möchtest, bietet es sich an eine .csv Datei zu erstellen und in einer Tabellenkalkulation damit weiterzuarbeiten? Dann kannst du flexibel umsortieren, filtern etc, wie du möchtest.
Grüße
hilfreich wäre, wenn du dein script hier mal bekanntgibst, so kann man nicht helfen.
Grundsätzlich: da du einmal nach Server und einmal nach Software sortiert/Gruppiert haben möchtest, bietet es sich an eine .csv Datei zu erstellen und in einer Tabellenkalkulation damit weiterzuarbeiten? Dann kannst du flexibel umsortieren, filtern etc, wie du möchtest.
Grüße
Hallo aivilon,
ein Vorschlag wäre (wenn ich dich richtig verstanden habe) sicherlich eine If-Abfrage für jedes Log:
Ich weiß nicht, wie genau dein Skript die Software-Versionen in die Datei schreibt, deswegen die Sternchen. Die Idee mit der Textfile mit den Servernamen ist auf jeden Fall viel besser als die mit der Variable.
Mein Ansatz oben müsste eigentlich funktionieren, das bekommt man sicherlich auch noch 'schöner' in einer
Ich hoffe ich konnte dir helfen!
Gruß Scriptex
ein Vorschlag wäre (wenn ich dich richtig verstanden habe) sicherlich eine If-Abfrage für jedes Log:
$Server1 = gc "C:\Temp\Test_Server1.log" # Variable festlegen: Get-Content 'erste Logfile'
If ($Server1 -like "*F-Secure 7.1.5*") # erste Software-Abfrage (Sternchen nicht vergessen)
{
Write-Output "Server1" > "C:\Temp\F-Secure7_1_5.txt" # schreibt "Server1" in die Datei 'F-Secure7_1_5.txt'
}
else
{
If ($Server1 -like "*Software Nr2*")
{
Write-Output "Server1" > "C:\Temp\SoftwareNr2..txt"
}
else
{
# und so weiter....
}
}
Ich weiß nicht, wie genau dein Skript die Software-Versionen in die Datei schreibt, deswegen die Sternchen. Die Idee mit der Textfile mit den Servernamen ist auf jeden Fall viel besser als die mit der Variable.
Mein Ansatz oben müsste eigentlich funktionieren, das bekommt man sicherlich auch noch 'schöner' in einer
ForEach
-Schleife hin. Um nicht jedesmal das Skript verändern zu müssen, wenn du ein neues Logfile auslesen willst, kannst du z.B. Read-Host
verwenden, um per GUI-Eingabe die Variable zu setzen.Ich hoffe ich konnte dir helfen!
Gruß Scriptex
Hallo aivilon,
hiermit erhälst du schonmal nur die gewünschten Eigenschaften aus der Ausgabe:
Sieht allerdings nicht so bombe aus. Ich wüsste aber gerade nicht, wie man das zurechtbiegen kann, irgendwie geht es mit Sicherheit.
Der Code liest auf jedem Server die installierte Software aus und zeigt dann Name, Version und Caption jeder Software spaltenweise (tabellenartig) an.
hiermit erhälst du schonmal nur die gewünschten Eigenschaften aus der Ausgabe:
$Serverliste = gc "C:\Temp\Serverliste.txt"
ForEach ($line in $Serverliste)
{
Get-WmiObject -Class Win32_Product| ft -Property Name, Version, Caption
}
Sieht allerdings nicht so bombe aus. Ich wüsste aber gerade nicht, wie man das zurechtbiegen kann, irgendwie geht es mit Sicherheit.
Der Code liest auf jedem Server die installierte Software aus und zeigt dann Name, Version und Caption jeder Software spaltenweise (tabellenartig) an.
Hi,
evtl. hilft dir das: http://www.mcseboard.de/windows-forum-scripting-71/powershell-export-cs ...
Grüße
evtl. hilft dir das: http://www.mcseboard.de/windows-forum-scripting-71/powershell-export-cs ...
Grüße
Ich benutze Out-File meist immer nur in Form von '>', also müsste es doch gehen, wenn man es dreht...
Es könnte sein, dass man das
Oder alternativ:
Ich kann es leider gerade nicht testen, würde mich mal interessieren, ob die Spalten korrekt angehängt werden oder erst die Namen, und dann die Eigenschaften...
$srvname;$Software > "C:\Temp\grossertest.csv" -Append
Es könnte sein, dass man das
-Append
auch weglassen kann. Bin mir nicht sicher.Oder alternativ:
$srvname > "C:\Temp\grossertest.csv"
$Software >> > "C:\Temp\grossertest.csv"
Ich kann es leider gerade nicht testen, würde mich mal interessieren, ob die Spalten korrekt angehängt werden oder erst die Namen, und dann die Eigenschaften...
Prinzipiell kann PS die Informationen so verarbeiten, wie du es wünschst. Was meiner Meinung nach nur noch als letztes fehlt, ist, dass PS Spalten in der CSV "erkennt" und jede Eigenschaft in eine eigene schreibt. Ich habe alle Tabellen, die ich mit PowerShell irgendwann mal erstellt habe, durchgeschaut und alle haben die Daten in eine Spalte geschrieben.
Irgendeinen Parameter muss es aber doch geben, ist doch schließlich nur Kosmetik... :/
EDIT: Ich habe gerade eine TXT gefunden, wo PS es richtig schön übersichtlich abgespeichert hat. Vielleicht ist das die Lösung.
Irgendeinen Parameter muss es aber doch geben, ist doch schließlich nur Kosmetik... :/
EDIT: Ich habe gerade eine TXT gefunden, wo PS es richtig schön übersichtlich abgespeichert hat. Vielleicht ist das die Lösung.