PowerShell Ergebnisse parsen

LasseSamenström

Lieutenant
Registriert
Mai 2016
Beiträge
775
Moin,

eins vorweg: Bin noch ein ziemlicher Powershell noob, aber mein erstes Script läuft fast so wie ich es will.
Es geht darum, dass die angelegten Userkonten gezählt werden und via FTP hochgeladen werden (FTP Server ist von außerhalb nicht erreichbar). Für jede VM wird in diesem Script auch ein eigener Ordner im FTP basierend auf den Computernamen angelegt. Darunter wird dann die csv abgespeichert. (Endet mit "Computername_Datum_Useranzahl")
Ich lasse mir nur zwei Werte ausgeben. (Name und den Status).

Da wir aber nun weit über 300 VM's besitzen, würde ich die Ergebnisse in ein Ergebnis mergen wollen, Beispiel:

Computername, Anzahl der User

Ich pack hier meine Script Katastrophe mit dazu

PowerShell:
#User auslesen
$Readuser = Get-WmiObject -ComputerName $env:computername -Class Win32_UserAccount -Filter "LocalAccount=True" | Select Name, Status

#User ausschließen
$DeleteUser = @("Gast","Guest","WDAGUtilityAccount","DefaultAccount","Administrator")

#Infos sammeln & aussortieren
$SortedUser = $Readuser | Where-Object {$_.Name -notin $DeleteUser -and $_.Status -ne "Degraded"}

#User zählen
$Usercount = ($SortedUser).count

#Ordner erstellen
$dirName = "$home\Desktop\${Env:ComputerName}"
if (!(Test-Path $dirName)) { mkdir $dirName }

#Ergebnis in CSV Liste exportieren#
$SortedUser | Export-Csv "$home\Desktop\$env:computername\$($env:computername)_$(get-date -f dd-MM-yyyy)-User_$($Usercount).csv" -Encoding UTF8 -NoClobber -NoTypeInformation

Pls help :heul::pcangry:
 
Hallo,
was ist dann deine Datenquelle? Die exportierten CSVs aus denen Du dann einen globalen Report bauen willst?
 
Sammel die (Zwischen-) Ergebnisse ($SortedUser) in einer Datenstruktur (bspw. Array) und schreib dieses in letzter Zeile in einen Filestream.
 
Aus meiner Sicht müsstest du das Skript erstmal dahingehend anpassen, dass es die einzelnen VMs remote abfragt. Aktuell funktioniert das ja nur, wenn das Skript direkt auf der VM ausgeführt wird.

Dazu bräuchtest du eine foreach-Schleife, mit der die durch die ganzen VMs durchgehst.
Vor der Schleife erstellst du eine leere CSV-Datei und schreibst in der Schleife die User & den VM-Namen immer in eine Zeile der CSV-Datei.
Bis auf den Teil des Ordnererstellens kann das Skript daher aus meiner Sicht so bleiben.
 
@-NachtschatteN-

Datenquelle wäre lokal auf einer unserer Maschinen. Wir werden die Dateien an Tag X syncen lassen und kurze später soll dann das zweite Script den ganzen Kram mergen.

@Faizy

Kannst du mir mal ein kleines Beispiel schreiben? Bin halt noch nicht so bewandert und bräuchte praktische Ansätze.

@Logic

Wäre eine Möglichkeit, werde ich mir mal näher anschauen.
 
Soooooooo, mühsam nährt sich...

Habe ein wenig herum experementiert und bin auch zu einer Lösung gekommen. Ich lasse mir den Computernamen + die Useranzahl in eine .csv ausgeben
Die Userliste lasse ich einfach in einer seperaten .txt Datei ausgeben (Da könnte man immer noch nachgucken)

Zum parsen:
PowerShell:
$files = Get-ChildItem $home\desktop\test\*.csv -Recurse
Get-Content $files | Set-Content $home\desktop\test\CsvFile.csv

bums, fertig. Bin mir jetzt aber noch unschlüssig wie ich die Formatierung hinbekomme. Wir haben schließliche mehrere Bleche und hätte das ganz gerne pro Blech. Das wird natürlich sehr umständlich...
 
  • Gefällt mir
Reaktionen: Hayda Ministral
Zurück
Oben