Ich habe ein PowerShell-Skript in meinen C# -Code integriert und rufe es mit C# auf.Der Aufruf von dynamischen PSObject-Eigenschaften in C# gibt RuntimeBinderException zurück
Was das Skript tut, ist es einige Gruppen und ihre Mitglieder aus Active Directory wird und gibt sie in meinem C# -Code als PSObject. Dieses Objekt hat eine Eigenschaft namens "Member", die ein Array von Mitgliedern enthält, die die Gruppe enthält. Jedes dieser Mitglieder hat andere Eigenschaften wie EmailAddress, Name usw., die ich über PowerShell hinzugefügt habe und ich habe auch das Skript getestet, es funktioniert wie beabsichtigt.
Hier ist mein Code in C#, wo ich versuchen, die Gruppenmitglieder mit einer dynamischen Variable zu erhalten:
GetGroupMembers(PSObject groupObject) {
// These are the group members, an object Array with 4 objects gets returned
dynamic members = groupObject.Properties["Member"].Value;
foreach (var member in members) {
string objectClass = member.ObjectClass;
ADObject memberObject;
switch (objectClass) {
case "user":
// This is where the exception gets thrown, since the "EmailAddress" value is null
string email = member.Properties["EmailAddress"].Value.ToString();
[...]
Das Problem hierbei ist, dass beim Debuggen, ich kann tatsächlich sehen, dass die Immobilie in der dynamischen gibt es Mitglieder Variable, aber es wird in der Mitglied Variable während der foreach-Schleife entfernt. Here's a screenshot I made during debugging, which shows clearly that the property is available in the members variable.
Die Ausnahme, die ich bekommen ein RuntimeBinderException mit der Meldung bei CallSite.Target (Closure, CallSite, Object, String) bei System.Dynamic.UpdateDelegates.UpdateAndExecute2 "auf einem Null-Referenzlaufzeit Bindung kann nicht ausgeführt" ist [T0, T1, TRet] (CallSite Website, T0 arg0, T1 arg1)
Vielleicht ist der Fehler klar, aber ich kann nicht herausfinden, was ich falsch mache. Würde mich über jede Hilfe freuen. Vielen Dank!
Ihr Screenshot nur zeigen, dass Eigenschaft vorhanden ist. Es gibt keinen Hinweis darauf, dass die Eigenschaft tatsächlich keinen Nullwert hat. Sie müssen Ihren Befehl teilen, um zu wissen, wo genau die Ausnahme auftritt: 'PSPropertyInfo property = member.Properties [" EmailAddress "]; Objektwert = property.Value; Zeichenfolge email = Wert.ToString(); '. – PetSerAl
@PetSerAl Danke für die Antwort. Das Problem ist, dass 'member.Properties [" EmailAddress "]' tatsächlich 'null' ist, und vor der foreach-Schleife kann ich sehen, dass die Eigenschaft mindestens existiert (wie Sie auf dem Screenshot erwähnt haben), und das ist das Seltsame, irgendwie geht es verloren ... Ich bekomme eine RuntimeBinderException, wenn ich die von Ihnen erwähnte Anweisung hinzufüge: 'PSPropertyInfo property = member.Properties [" EmailAddress "]; ' – lleshiart
' string email = member.EmailAddress; ' – PetSerAl