Benutzer mit den meisten Antworten
Wie kann ich einem AD-User auslesen und eine neue Eigenschaft vom Typ STRING zuweisen?

Frage
-
Hi,
habe mir in eine Variable einen User aus dem AD ausgelesen. Ich wollte diesem nun eine weitere Eigenschaft zuweisen, was auch funktioniert hat. Das Problem bei der Sache ist das ich diese Eigenschaft vom Typ String haben möchte/muss es mir diese aber als ADPropertyValueCollection schreibt. Wie kann ich also sagen das es ein String ist...?
$User1 DistinguishedName : CN=User,OU=Abteilung, DC=Domain, DC=local Enabled : True GivenName : Max Name : M.Mustermann ObjectClass : user ObjectGUID : 603c2917... SamAccountName : M.Mustermann SID : S-1-5-21-... Surname : Mustermann UserPrincipalName : M.Mustermann@domain.local $User1.newproperty = "Newprop" ($User1.newproperty).GetType().Name ADPropertyValueCollection
Grüße
Antworten
-
.... ohne den Rest Deines Codes, also den Teil in dem Du die neue Property hinzufügst, können wir nur raten. Was willst Du denn eigentlich erreichen? Vielleicht hast Du Dich ja in etwas verrant, was möglicherweise ganz anders viel besser oder leichter gelöst werden könnte. .... z.B. mit einem PSCostomObject
Grüße - Best regards
PS:> (79,108,97,102|%{[char]$_})-join''
Alle Antworten
-
Was willst Du denn eigentlich erreichen? Wenn ich mich nicht irre, hast Du im Moment nur deine "lokale" Variable manipuliert. Das heißt ja nicht, dass das AD davon etwas mitbekommt, oder? ;-)
Grüße - Best regards
PS:> (79,108,97,102|%{[char]$_})-join'' -
Ja ich will genau das erreichen. Ich will nichts im AD ändern. Es geht um die Abteilung die im DistinguishedName enthalten ist. Diese habe ich durch .split in eine extra variable geholt und möchte ich nun der lokalen Uservariable als string zuordnen damit ich diese mit datagridview ausgeben kann. Wenn sie nähmlich nicht als string sondern als ADpropertyvaluecollection gespeichert ist, wird mir im datagridview angezeigt das es sich um eine
Microsoft.ActiveDirectory.Management.ADPropertyValueCollection handelt...
ich möchte also nur das es ein string in der lokalen variable ist. mehr nicht :)
Grüße
-
Hmmm ... ich denke, dass Deine NewProperty bereits ein String ist ... probier ma das hier
$($User1.newproperty).GetType().Name
... ohne das Dollarzeichen vorne dran, ermittelst Du immernoch den Typ der "eigentlichen Variablen" und nicht der einzelnen Property.Grüße - Best regards
PS:> (79,108,97,102|%{[char]$_})-join'' -
> .... ohne das Dollarzeichen vorne dran, ermittelst Du immernoch den Typ der "eigentlichen Variablen" und nicht der einzelnen Property.
Ich glaube da läuft etwas anderes schief :-)
Kurzes Repro:
PS C:\WINDOWS\system32> $user.TestProperty = "Testeigenschaft"
PS C:\WINDOWS\system32> $user.TestProperty | gm
TypeName: System.StringAlso wenn ich einen String in die Property stecke, dann ist das auch ein String. Wenn ich eine ADPropertyValueCollection da reinstecke, dann ist das halt genau das :)
PS C:\WINDOWS\system32> $user.TestProperty.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True False ADPropertyValueCollection System.Collections.CollectionBase
- Bearbeitet Martin Binder Donnerstag, 13. Juli 2017 15:31 ...
-
Genau. Deswegen bleibe ich auch lieber bei der 'reinen' Powershell-Syntax mit Get-Member, als es mit den Methoden zu versuchen.
Probier ma:
$user.TestProperty.GetType()
... ich glaube daher kommt die Verwirrung.
Edit: Siehste! ;-) :-D
Grüße - Best regards
PS:> (79,108,97,102|%{[char]$_})-join''- Bearbeitet BOfH-666 Donnerstag, 13. Juli 2017 15:32
-
Moin,
also anscheinend ist es ja doch ein String. aber was läuft dann schief ?
Die Eigenschaft wird auch beim auslesen des Users angezeigt...
Vor dem setzen der Property:
$User DistinguishedName : CN=t.test,,OU=Test,DC=test,DC=local Enabled : True GivenName : Max Name : M.Mustermann ObjectClass : user ObjectGUID : 38d0f898-3ba8-46fd-bc84-7987169a5940 SamAccountName : M.Mustermann SID : S-1-5-21-1609355170-1825743656-1866613199-49084 Surname : Mustermann UserPrincipalName : M.Mustermann@kbbz.ads
Nach dem hinzufügen einer neuen Property:
$User.testproperty = "Test" $User testproperty : {Test} DistinguishedName : CN=t.test,,OU=Test,DC=test,DC=local Enabled : True GivenName : Max Name : M.Mustermann ObjectClass : user ObjectGUID : 38d0f898-3ba8-46fd-bc84-7987169a5940 SamAccountName : M.Mustermann SID : S-1-5-21-1609355170-1825743656-1866613199-49084 Surname : Mustermann UserPrincipalName : M.Mustermann@kbbz.ads WriteDebugStream : {} WriteErrorStream : {} WriteInformationStream : {} WriteVerboseStream : {} WriteWarningStream : {}
Warum steht die neue Property in gescheiften Klammern? und was sind die anderen 5 "Eigenschaften" die noch angehängt wurden?
Grüße
-
.... ohne den Rest Deines Codes, also den Teil in dem Du die neue Property hinzufügst, können wir nur raten. Was willst Du denn eigentlich erreichen? Vielleicht hast Du Dich ja in etwas verrant, was möglicherweise ganz anders viel besser oder leichter gelöst werden könnte. .... z.B. mit einem PSCostomObject
Grüße - Best regards
PS:> (79,108,97,102|%{[char]$_})-join'' -
Wenn ich mir folgendes ausgeben lasse, stimmt es auch nicht überein. Also irgendetwas muss ich ja flasch gemacht haben beim setzen der Propertty...
PS C:\> $user.GivenName.GetType().Name String PS C:\> $user.testproperty.GetType().Name ADPropertyValueCollection PS C:\> ($user.givenname).GetType().Name String PS C:\> ($user.testproperty).GetType().Name ADPropertyValueCollection PS C:\> $($user.givenname).GetType().Name String PS C:\> $($user.testproperty).GetType().Name String
-
Ok, ich habe ein Programm mit dem ich User bearbeiten kann, das heißt ich kann mir User auslesen lassen umbenennen, löschen und verschieben kann. Daneben gibt es auch eine Funktion mit der ich nach Usern suchen kann und mir diese anzeigen lassen kann. und diese möchte ich mit Name und Abteilung in einem Datagridview anzeigen lassen. Funktioniert alles ohne Probleme. Die Abteilung in der sich der User befindet, wollte ich einfach zusätzlich an den ausgelesenen User anhängen, um nicht extra eine neue Tabelle zu erstellen um diese in das Datagridview einlesen zu können. Aber ich Bekomme nicht den Wert für "Abteilung" sondern eine Valuecollection zurück...
Hier ein Screenshot:
-
Ok habs jetzt doch selber gelöst... Hab mich wirklich einfach verrannt und nicht die offensichtliche Lösung gesehen...
Einfach ein neues Object erstellen und die Daten anfügen...
$obj = New-Object -TypeName PSObject $obj | Add-Member -MemberType NoteProperty -Name Anmeldename -Value $User.SamAccountName $obj | Add-Member -MemberType NoteProperty -Name Abteilung -Value Abteilung
Danke für eure Hilfe und Zeit. Tut mir leid das ich das Problem so undurchsichtig beschrieben habe, sonst wären bestimmt schon einige auf die Idee gekommen ^^
Grüße