Hello,
I'm stuck at the following. I have three hash tables like this:
$a (from AD): Name Value ---- ----- ComputerName1 {ManagedBy, WhenChanged, DistinguishedName, Name...} ComputerName2 {ManagedBy, WhenChanged, DistinguishedName, Name...} ComputerName3 {ManagedBy, WhenChanged, DistinguishedName, Name...} ComputerName4 {ManagedBy, WhenChanged, DistinguishedName, Name...} ... $b (from SCCM): Name Value ---- ----- ComputerName1 {LastHWScan, Name, UserName} ComputerName2 {LastHWScan, Name, UserName} ComputerName3 {LastHWScan, Name, UserName} ComputerName4 {LastHWScan, Name, UserName} ... $c (from McAfee): Name Value ---- ----- ComputerName1 {LastUpdate, Name} ComputerName2 {LastUpdate, Name} ComputerName3 {LastUpdate, Name} ComputerName4 {LastUpdate, Name} ...
I'm desperately looking for a way to join these hash tables so I get
Name Value ---- ----- ComputerName1 {ManagedBy, WhenChanged, DistinguishedName, LastUpdate, LastHWScan, UserName} ComputerName2 {ManagedBy, WhenChanged, DistinguishedName, LastUpdate, LastHWScan, UserName} ComputerName3 {ManagedBy, WhenChanged, DistinguishedName, LastUpdate, LastHWScan, UserName} ComputerName4 {ManagedBy, WhenChanged, DistinguishedName, LastUpdate, LastHWScan, UserName} ...
(Yes, I need to get rid of the name field in each hash table, because it is equal to the key. My ArrayTo-HashTable functions needs some tweaking).
The three hash tables each have about 20 000 objects, so I do not want to use a cascade of ForEach loops as this will take a long long time (20 000³ calculations, although in reality I'd break out of the loop on a hit). What I actually want to do is a SQL kind of FULL OUTER JOIN. I find zero information about this. The only thing I find for doing database-like actions in memory is with LINQ, but I read on several places that LINQ doesn't work with PoSh (although it is .NET) and even then I am missing information on how to implement it - the only examples I find are from other .NET languages (eg. C#).
I know about http://bartdesmet.net/blogs/bart/archive/2008/06/07/linq-through-powershell.aspx, but then I would need to use a custom DLL and that would make my script(s) less portable. Preferably I have no dependencies.
Does any see possibilities to handle large datasets without ForEach loops? Thank you in advance.
My grandmother always used to say: "::1: sweet ::1:"