PowerShell: merge two hash tables

I have two hash tables created from data from two different XML files. What I would like to do is to combine two tables into one hash table based on the common value in both tables.

Inv Hash:

$invHash = $invXML.InventoryDto.ProductInventoryItem.SkuInventoryItem | select @{ L = 'SkuID'; E = { $_.SkuId } }, @{ L = 'SkuStatusCode'; E = { if ($_.SkuStatusCode -eq 'Active') { 'True' } else { 'False'} } }, @{ L = 'QuantityOnHand'; E = { $_.QuantityOnHand } } 

Example contents of $ invHash:

 SkuID SkuStatusCode QuantityOnHand ----- ------------- -------------- 1828 True 441 3022 True 325 2981 True 214 2989 True 842 

PriceHash:

  $priceHash = $priceXML.PricingDto.ProductPricingItem.SkuPricingItem | select @{ L = 'SkuID'; E = { $_.SkuId } }, @{ L = 'RegularPrice'; E = { $_.PriceGroup.RegularPrice } }, @{ L = 'CurrentPrice'; E = { $_.PriceGroup.CurrentPrice } } 

Example contents of $ priceHash:

  SkuID RegularPrice CurrentPrice ----- ------------- -------------- 1828 49.99 48.99 3022 25 19.99 2981 45 39.99 2989 28 18.99 

The desired contents of $ invpriceHash:

 SkuID SkuStatusCode QuantityOnHand RegularPrice CurrentPrice ----- ------------- -------------- -------------- -------------- 1828 True 441 49.99 48.99 3022 True 325 25 19.99 2981 True 214 45 39.99 2989 True 842 28 18.99 
+4
source share
1 answer

Considering:

f1.csv:

 SkuID,SkuStatusCode,QuantityOnHand 1828,True,441 3022,True,325 2981,True,214 2989,True,842 

f2.csv:

 SkuID,RegularPrice,CurrentPrice 1828,49.99,48.99 3022,25,19.99 2981,45,39.99 2989,28,18.99 

Try this contrived solution, not as good as join-object , because you need to know the properties. You should also be careful with the + operator between $a and $b , which is not commutative, it changes the order of the groups:

  $a = Import-Csv C:\temp\f1.csv $b = Import-Csv C:\temp\f2.csv $b + $a | Group-Object -Property skuId | % {$x= New-Object -TypeName psCustomObject -Property @{SkuID=$_.name;RegularPrice=$_.group[0].RegularPrice; CurrentPrice=$_.group[0].CurrentPrice; SkuStatusCode=$_.group[1].SkuStatusCode;QuantityOnHand=$_.group[1].QuantityOnHand}; $x} 

for me it gives:

 QuantityOnHand : 441 RegularPrice : 49.99 SkuStatusCode : True SkuID : 1828 CurrentPrice : 48.99 QuantityOnHand : 325 RegularPrice : 25 SkuStatusCode : True SkuID : 3022 CurrentPrice : 19.99 QuantityOnHand : 214 RegularPrice : 45 SkuStatusCode : True SkuID : 2981 CurrentPrice : 39.99 QuantityOnHand : 842 RegularPrice : 28 SkuStatusCode : True SkuID : 2989 CurrentPrice : 18.99 
+5
source

Source: https://habr.com/ru/post/1485450/


All Articles