Pathological Scripter

I want my DirectoryEntry methods back

September 28, 2006 · 1 Comment

RC2 is out and we have a new type alias [ADSI] for dealing with DirectoryEntry objects in AD, but inexplicably (at least to me), we’ve lost all the methods associated with that class unless you change everything to use psbase

So instead of saying something like

PS>$Entry = New-Object DirectoryServices.DirectoryEntry (“LDAP://dc=domain,dc=com”)

I can say

PS>$Entry = [ADSI] “LDAP://dc=domain,dc=com”

But instead of saying

PS>$Entry.get_Children()

I have to say

PS>$Entry.psbase.get_Children() 

And a fair amount of working code no longer works.

I don’t pretend to understand the discussion on the newsgroup about “adapting” and why using psbase is better than before. So in the spirit of PowerShell, I’ve just extended the type definition for DirectoryEntry so that I can still use the previous code.

For each of the previous methods for DirectoryEntry, I’ve added a ScriptMethod. So for example,

<ScriptMethod>
  <Name>get_Children</Name>
  <Script>
    $this.psbase.get_Children()
  </Script>
</ScriptMethod>

allows me to continue to use

$Entry.get_Children()

without the psbase “layer”.

This also allows previous code like MoW’s

<ScriptProperty>
  <Name>PasswordLastChanged</Name>
  <GetScriptBlock>
  $this.InvokeGet(‘PasswordLastChanged’)
  </GetScriptBlock>
</ScriptProperty>

to work again. I haven’t tested these definitions thoroughly so YMMV, but if you’d like to try them out, please help yourself to a copy of them. Comments are always welcome also.

Categories: Uncategorized

1 response so far ↓

  • justanothersysadmin // January 22, 2008 at 11:40 pm | Reply

    Wow,

    I had not really gotten into ScriptMethods, but your last few posts have really shown their usefulness. The whole “psbase” is also a bit over my head (although I have seen some posts from the PS development guys that they might have made a mistake in releasin V1 that way), so this is definitely a neat trick around it.

Leave a Comment