druide83
Goto Top

Array oder Object oder wie soll ich das machen

Hallo,

mal wieder verzweifelt.
Wahrscheinlich ist die Lösung einfach, aber ich habe gerade keinen Kopf mehr zum klar denken.

Folgendes Problem:

Ich greife per Powershell auf eine Access-Abfrage um an Benutzerdaten von Benutzern zu kommen, die sich bereits seit einiger Zeit nicht mehr am System angemeldet haben.
Benötigt werden die Daten "Name", "Vorname","LastLogonTimestamp","tutorName" und "TutorID"
Die Abfrage existiert bereits und der Zugriff mit der Shell funktioniert auch.

Da es jetzt vorkommen kann, das mehrere Benutzer den gleichen Tutor haben, möchte ich irgendwie an die Benutzer pro Tutor kommen.

Ich hatte mir gedacht, das das über ein array gehen sollte. Kenne mich aber leider nur mit eindimensionalen Arrays aus.

Das ganze sollte dann vielleicht so aussehen:

Name Vorname Lastlogontimestamp tutorname tutorid
Muster Max 12.12.2012 Hempel 1
.... ....... ............. .

Wie kann ich sowas realisieren?

Habe es schonmal über ein Objekt versucht, da ich hier aber leider auch nicht so bewandert bin, ohne Erfolg.

Wenn noch weitere Angaben benötigt werden, einfach melden ;)

Hoffe es kann mir jemand helfen.

Grüße

Content-ID: 303518

Url: https://administrator.de/forum/array-oder-object-oder-wie-soll-ich-das-machen-303518.html

Ausgedruckt am: 23.12.2024 um 08:12 Uhr

114757
114757 03.05.2016 aktualisiert um 13:13:42 Uhr
Goto Top
Moin.
aber ich habe gerade keinen Kopf mehr zum klar denken.
joa, dann ist aber ne große Ladung Kaffee fällig face-wink

Schreibe deine Daten in ein Array aus Objekten und gruppiere sie dann:

Erstelle zuerst ein leeres Array
$array = @()
Dann fügst du in der Schleife in der du deine Daten aus Access ausließt jeweils immer ein Object deinem Array hinzu
while(!$rs.EOF){
    $array += [pscustomobject] @{Name=$rs.Fields('Name').Value; Vorname=$rs.Fields('Vorname').Value;tutorid=$rs.Fields('Vorname').Value}  
   $rs.MoveNext()
}
Und zum Schluss gruppierst du das Array aus den Objekten anhand der Eigenschaft tutorid.
$array | group tutorid
feddich. In der Eigenschaft Group findest du dann zu jeder TutorId die jeweilig zugehörigen Objekte.


Gruß jodel32
Druide83
Druide83 03.05.2016 um 13:27:45 Uhr
Goto Top
Hallo jodel32,

vielen Dank für deine Antwort. Leider war ich da auch schon und hat mir nicht geholfen.

Es soll dann ja pro Tutor eine Email mit den ihm zugeordneten Mitarbeitern gesendet werden.
Hier habe ich ein Array das pro Eintrag tutor, name und vorname enthält. Ich kann aber nicht auf alle tutoren geehen wie mit $array.tutor

Oder sehe ich das falsch
114757
114757 03.05.2016 aktualisiert um 13:37:41 Uhr
Goto Top
Zitat von @Druide83:
vielen Dank für deine Antwort. Leider war ich da auch schon und hat mir nicht geholfen.
Doch das hilft und ist die gängigste Methode dafür!
Es soll dann ja pro Tutor eine Email mit den ihm zugeordneten Mitarbeitern gesendet werden.
Hier habe ich ein Array das pro Eintrag tutor, name und vorname enthält. Ich kann aber nicht auf alle tutoren geehen wie mit $array.tutor
Du machst das so wie ich oben geschrieben habe und erstellst für jede Zeile deiner Daten ein Objekt das du in das Array packst, dann hat du ein Array aus Objekten welches du wie oben gruppierst und dann auf die User der jeweiligen Gruppe zugreifen kannst:
In der Foreach-Schleife ist dann in $_.Name die TutorID und in $_.Group alle User-Objekte die zur TutorID gehören.
$array | group tutorid | %{
   write-host "TutorID: $($_.Name)"  
   write-host "Mitglieder: $($_.Group | ft | out-string)"  
}
Über die User der TutorID kannst du dann ebenfalls in der obigen Schleife ein weiteres mal iterieren
$_.Group | %{
   $_.EmailAddress
   $_.Name
   $_.Vorname
  # etc.
}
Simple an effective.

Schau dir einfach mal die Objekte in der Konsole an dann weist du auch was ich meine!

Du solltest wirklich mal eine Pause machen. Denn ich hab jetzt kein Bock dir das jetzt 20 mal zu erklären ...
Druide83
Druide83 03.05.2016 um 14:17:40 Uhr
Goto Top
Ich habe auch keine Lust dir mit meinem Problem auf die Nerven zu gehen, aber ich sollte bis morgen mit meinem Skript fertig sein.

HIermit
$array | group tutorid
bekomme ich als Ausgabe nur

Count Name Group
---- -----
10 {@{Name=Mustermann; Vorname=Stefan; tutorid=Bla}, @{Name=Irgendwer; Vorname=Christoph; tutorid=Bla}, ......}

Wenn ich dann deine Schleife laufen lasse

$array | group tutorid | %{ 
   write-host "TutorID: $($_.Name)"   
   write-host "Mitglieder: $($_.Group | ft | out-string)"   
}

Bekomme ich nur einen Wert zurück:

TutorID:
Mitglieder: @{Name=Mustermann; Vorname=Stefan; tutor=Bla}
@{Name=Irgendwer; Vorname=Christoph; tutor=Bla}
...
...
usw

TutorID ist dann leer und in Mitglieder stehen wieder alle Objekte in ungruppierter Reihenfolge.

Ich bin denke ich einfach zu blöd hierfür und sollte es bleiben lassen. face-sad