I’ve been using for years the following ADSI code to query members of the local administrators group:
@( ([ADSI]"WinNT://./Administrators").psbase.Invoke('Members') | % { $_.GetType().InvokeMember('AdsPath','GetProperty',$null,$($_),$null) } ) -match '^WinNT'
It works w/o any problem from PowerShell 2.0 to 4.0 and there are many code out there using this syntax.
I’ve noticed that there’s now a problem with the above syntax on PowerShell 5.0 running on Windows 7 or Windows 10.
The problem is precisely when the member is user. When we use the GetType() method, it reports:
Error while invoking GetType. Could not find member. Weird MissingMemberException 😦
When the member is a group, invoking GetType() still works.
How to fix this?
The best option is to have a piece of code that is compatible with any version of PowerShell and that doesn’t use the GetType() method invocation.
What about?
([ADSI]"WinNT://./Administrators").psbase.Invoke('Members') | % { ([ADSI]$_).InvokeGet('AdsPath') }
Isn’t it more simple and less obscure? 😀
After using my Google-fu, some people reported this issue on stackoverflow.com about a year ago and the bug was also submitted to Microsoft on this page. What about also voting for it?
You might want to put the UserVoice link, Connect is not used anymore:
https://windowsserver.uservoice.com/forums/301869-powershell/suggestions/11088693-powershell-5-bug-in-gettype-for-com-objects-ia
Fait & surtout merci FX 🙂
Pingback: Dew Drop – June 15, 2016 (#2272) | Morning Dew
I came across the same situation @ work. Thank you (y). Very useful info. 🙂
Pingback: Get-LocalGroupMember generates error for Administrators group - Boot Panic