[英]Why won't this array property populate
我有兩個具有一些共享數據的多維 arrays。 兩個 arrays 之間的元素順序不同,屬性名稱也不是在每個實例中都匹配。 但是,要比較的字段將始終具有相同的名稱(即 Array1 中的 $Asset 和 $Array2 中的 $Name)。 我想要的是在 Array2 中存在部分匹配時填充 Array1 中的屬性。 下面是一個例子。
$Array1 = @(
@{Asset = '123'; Region = 'Earth'; User = ''}
@{Asset = '098'; Region = 'Moon'; User = 'Carla'}
)
$Array2 = @(
@{Name= '123456'; User = 'Steve'; Date = '1/1/22'}
)
我想要的是讓腳本找到部分匹配項 (123),並在此基礎上用“Steve”填充 $Array1.user。 對於 ForEach 循環來說,這似乎應該是一件容易的事,但我不知道該怎么做。 以下是我嘗試過的一些示例。
ForEach ($Comp in $Array1)
{
$Array2 -like "*$Comp*"
$Comp.user = ($Array2).user
}
_______________
ForEach ($Comp in $Array1)
{
$Comp -match $Array2
$Comp.user = $($Array2).user
}
我嘗試了嵌套 ForEach 循環、ForEach 循環與 If 語句等的不同組合。我確信這是一個簡單的修復,但我是 PS 的新手,沒有看到我的問題。 能否請你幫忙? 這是唯一讓我的腳本不完整的東西。
提前致謝!
只是為了首先澄清一些術語,你實際上並沒有多維 arrays - 你會用$x = new-object "string[,]" 2, 2
類的東西聲明它們,然后你必須將每個值插入數組單獨初始化它$x[0, 0] = "aaa"; $x[0, 1] = "bbb"; ... etc
$x[0, 0] = "aaa"; $x[0, 1] = "bbb"; ... etc
您真正得到的是兩個一維 arrays,其中數組中的每一項都是一個哈希表。
話雖如此,一個簡單的方法來做你想做的事是使用這個命令式代碼片段:
# set up some test data
$Array1 = @(
@{ "Asset" = "123"; "Region" = "Earth"; "User" = "" },
@{ "Asset" = "098"; "Region" = "Moon"; "User" = "Carla"}
)
$Array2 = @(
@{ "Name" = "123456"; "User" = "Steve"; "Date" = "010/1/22" }
)
# update the user details
foreach( $item1 in $Array1 )
{
foreach( $item2 in $Array2 )
{
if( $item2.Name -like "$($item1.Asset)*" )
{
$item1.User = $item2.User
}
}
}
# show the result
$Array1 | ConvertTo-Json
# [
# {
# "Region": "Earth",
# "User": "Steve", # <-- was "", is now "Steve"
# "Asset": "123"
# },
# {
# "Region": "Moon",
# "User": "Carla",
# "Asset": "098"
# }
# ]
嵌套的foreach
循環基本上將$Array1
中的每個項目與$Array2
中的每個項目進行比較,並在if
表達式為真時更新$Array1
中的項目。
管道可能有一些稍微靈活的方法,但上面的代碼完成了工作:-)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.