我有2个哈希表:
[hashtable]$Localisation = @{
"Macdo" = "OU=France,OU=Paris";
"BurgerKing" = "OU=USA,OU=LA";
"Quick" = "OU=Japan,OU=Tokyo";
}
[hashtable]$Profil = @{
"Big Mac" = "Macdo";
"Whooper" = "BurgerKing";
"Burger" = "Quick, BurgerKing, Macdo";
"Fries" = "BurgerKing, Macdo";
"Coke" = "Quick, Macdo";
"HappyMeal" = "Macdo";
}
我需要得到这样的结果:
"Big Mac" = "OU=France,OU=Paris"
"Whooper" = "OU=USA,OU=LA";
"Burger" = "OU=Japan,OU=Tokyo, OU=USA,OU=LA, OU=France,OU=Paris"
"Fries" = "OU=USA,OU=LA, OU=France,OU=Paris";
"Coke" = "OU=Japan,OU=Tokyo, OU=France,OU=Paris";
"HappyMeal" = "OU=France,OU=Paris";
或
Big Mac = OU=France,OU=Paris
Whooper = OU=USA,OU=LA
Burger = OU=Japan,OU=Tokyo,
OU=USA,OU=LA,
OU=France,OU=Paris
Fries = OU=USA,OU=LA,
OU=France,OU=Paris
Coke = OU=Japan,OU=Tokyo,
OU=France,OU=Paris
HappyMeal = OU=France,OU=Paris
我尝试过:
$tempLoca = @()
foreach ($value in $Profil.values) {
if($Localisation.Contains($value)) {
$tempLoca = $Localisation.Contains($value),$Profil.key
}
}
但是我得到了:
$tempLoca
OU=France,OU=Paris
使用我的代码,我只有最后一个值。我不知道是否需要将值放入数组或哈希表中(因为它们是多个相似的值)。
您有个主意吗?谢谢
答案 0 :(得分:3)
尝试一下:
[hashtable]$Localisation = @{
"Macdo" = "OU=France,OU=Paris";
"BurgerKing" = "OU=USA,OU=LA";
"Quick" = "OU=Japan,OU=Tokyo";
}
[hashtable]$Profil = @{
"Big Mac" = "Macdo";
"Whooper" = "BurgerKing";
"Burger" = "Quick, BurgerKing, Macdo";
"Fries" = "BurgerKing, Macdo";
"Coke" = "Quick, Macdo";
"HappyMeal" = "Macdo";
}
$tempLoca = @()
foreach ($key in $Profil.Keys) {
$locals = ($Profil.$key -split ',') | ForEach-Object { $_.Trim() }
$result = @()
foreach ($item in $locals) {
if($Localisation.ContainsKey($item)) {
$result += $Localisation.$item
}
}
$tempLoca += '"{0}" = "{1}"' -f $key, ($result -join '; ')
}
$temploca
它将输出
"Big Mac" = "OU=France,OU=Paris"
"HappyMeal" = "OU=France,OU=Paris"
"Burger" = "OU=Japan,OU=Tokyo; OU=USA,OU=LA; OU=France,OU=Paris"
"Whooper" = "OU=USA,OU=LA"
"Fries" = "OU=USA,OU=LA; OU=France,OU=Paris"
"Coke" = "OU=Japan,OU=Tokyo; OU=France,OU=Paris"
注意,我将$ Localization哈希中的OU值与分号;
组合在一起,以将它们与值本身区分开。如果那不是您想要的,只需将($result -join '; ')
替换为($result -join ', ')
答案 1 :(得分:3)
类似于IMO的PowerShell,构建PSCustomObject并将其分组:
$ProfileLocalisation = ForEach ($key in $Profil.Keys) {
ForEach ($local in ($Profil.$key -split ',').Trim() ) {
[PSCustomObject]@{
Profile = $key
Localisation = $Localisation.$local
}
}
}
$ProfileLocalisation
示例输出:
Profile Localisation
------- ------------
Big Mac OU=France,OU=Paris
HappyMeal OU=France,OU=Paris
Burger OU=Japan,OU=Tokyo
Burger OU=USA,OU=LA
Burger OU=France,OU=Paris
Whooper OU=USA,OU=LA
Fries OU=USA,OU=LA
Fries OU=France,OU=Paris
Coke OU=Japan,OU=Tokyo
Coke OU=France,OU=Paris
并分组:
$ProfileLocalisation | Group-Object Profile | ForEach-Object {
[PSCustomObject]@{
Profile = $_.Name
Localisations = ($_.Group.Localisation -join ';')
}
}
Profile Localisations
------- -------------
Big Mac OU=France,OU=Paris
HappyMeal OU=France,OU=Paris
Burger OU=Japan,OU=Tokyo;OU=USA,OU=LA;OU=France,OU=Paris
Whooper OU=USA,OU=LA
Fries OU=USA,OU=LA;OU=France,OU=Paris
Coke OU=Japan,OU=Tokyo;OU=France,OU=Paris