PowerShell:组合两个哈希表
Posted
技术标签:
【中文标题】PowerShell:组合两个哈希表【英文标题】:PowerShell: Combine two hash tables 【发布时间】:2013-06-06 05:47:30 【问题描述】:我有两个从两个不同 XML 文件中的数据创建的哈希表。我想做的是根据两个表中的共同值将这两个表组合成一个哈希表。
Inv 哈希:
$invHash = $invXML.InventoryDto.ProductInventoryItem.SkuInventoryItem |
select @ L = 'SkuID'; E = $_.SkuId , @ L = 'SkuStatusCode';
E = if ($_.SkuStatusCode -eq 'Active') 'True' else 'False' ,
@ L = 'QuantityOnHand'; E = $_.QuantityOnHand
$invHash 的示例内容:
SkuID SkuStatusCode QuantityOnHand
----- ------------- --------------
1828 True 441
3022 True 325
2981 True 214
2989 True 842
价格哈希:
$priceHash = $priceXML.PricingDto.ProductPricingItem.SkuPricingItem |
select @ L = 'SkuID'; E = $_.SkuId , @ L = 'RegularPrice';
E = $_.PriceGroup.RegularPrice , @ L = 'CurrentPrice';
E = $_.PriceGroup.CurrentPrice
$priceHash 的示例内容:
SkuID RegularPrice CurrentPrice
----- ------------- --------------
1828 49.99 48.99
3022 25 19.99
2981 45 39.99
2989 28 18.99
$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
【问题讨论】:
在我看来,您正在尝试执行“内存中连接”。这篇博文blogs.msdn.com/b/powershell/archive/2012/07/13/join-object.aspx 有一个全面的解决方案。 【参考方案1】:给定:
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
试试这个牵强的解决方案,不如join-object
,因为你需要知道属性。您还必须小心 +
运算符在 $a
和 $b
之间,这不是可交换的,它会更改组顺序:
$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
对我来说它给了:
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
【讨论】:
这很棒!没有意识到我实际上是在使用对象而不是哈希。一旦我明白这让这变得更加合乎逻辑。以上是关于PowerShell:组合两个哈希表的主要内容,如果未能解决你的问题,请参考以下文章
sql Powershell Migration工具http://stackingcode.com/blog/2011/10/12/database-migrations-with-powershel
powershell Powershell函数从文件中读取哈希表文本表示并将其转换为哈希表对象
powershell 来自https://stackoverflow.com/questions/31051103/how-to-export-a-class-in-powershell-v5-mod