Fix how COM objects are enumerated#11795
Merged
adityapatwardhan merged 3 commits intoPowerShell:masterfrom Feb 10, 2020
Merged
Conversation
SteveL-MSFT
requested changes
Feb 7, 2020
| $group = [ADSI]"WinNT://./Users,Group" | ||
| $members = $group.Invoke('Members') | ||
| $names = $members | ForEach-Object { $_.GetType().InvokeMember('Name', 'GetProperty', $null, $_, $null) } | ||
| $names | Should -Not -BeNullOrEmpty |
Member
There was a problem hiding this comment.
Are there any specific names we can validate against that are always expected for this COM object?
Member
Author
There was a problem hiding this comment.
I guess 'Authenticated Users' and 'INTERACTIVE'. Let me update and test it out.
iSazonov
reviewed
Feb 7, 2020
adityapatwardhan
approved these changes
Feb 7, 2020
Member
|
@SteveL-MSFT please update your review |
SteveL-MSFT
approved these changes
Feb 7, 2020
adityapatwardhan
pushed a commit
to adityapatwardhan/PowerShell
that referenced
this pull request
Feb 18, 2020
|
🎉 Handy links: |
14 tasks
22 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PR Summary
Fix #11782
The
ComEnumeratorwas introduced back in early .NET Core 2.0 preview period of time (#4553), becauseGetEnumerator()didn't work on COM object even if the object can be cast toIEnumerableand .NET Core team said it was by design at the time (dotnet/runtime#21690).With .NET Core 3.1,
GetEnumerator()works on the COM objects that can be cast toIEnumerable🎉So we can directly use the .NET Core support to get the enumerator for a COM object that implements
IEnumerable.However, for the COM object that can be cast to
IEnumerator, exception is thrown when callingMoveNext()on it.So we still need the
ComEnumerator, but much simplified to just cover the case that the COM object implementsCOM.IEnumVARIANTinterface.PR Context
PR Checklist
.h,.cpp,.cs,.ps1and.psm1files have the correct copyright headerWIP:or[ WIP ]to the beginning of the title (theWIPbot will keep its status check atPendingwhile the prefix is present) and remove the prefix when the PR is ready.