【发布时间】:2021-07-19 06:20:38
【问题描述】:
我正在尝试使用可以更新和添加新用户的 eventID 列表创建用户名数组,即 (('user1', '23,4523'), ('user2', '5670,2300') , ('user3','321,1299') )
当我使用第一个用户初始化数组并使用其他事件更新该用户时,我得到了预期的结果。
PS> $usrProfile
user1
4567,1234
当我添加一个新用户('user2','6688')而不是获得数组计数'2'时,它仍然是'1'并且数组返回数组对象详细信息.....好吧,所以我觉得可行
Length : 2
LongLength : 2
Rank : 1
SyncRoot : {user1, 4567,1234,2300}
IsReadOnly : False
IsFixedSize : True
IsSynchronized : False
Count : 2
Length : 2
LongLength : 2
Rank : 1
SyncRoot : {user2, 6688}
IsReadOnly : False
IsFixedSize : True
IsSynchronized : False
Count : 2
....然后当我更新'user2'时轮子脱落,原来的'user1'记录消失并且'user2'具有更新的值,但失去了初始值。此外,最初 foreach 循环中的 $item[0] 返回用户名,添加新用户后 $item[0] 返回对象信息..
Length : 2
LongLength : 2
Rank : 1
SyncRoot : {System.Object[], System.Object[]}
IsReadOnly : False
IsFixedSize : True
IsSynchronized : False
Count : 2
Length : 2
LongLength : 2
Rank : 1
SyncRoot : {user2, 7009}
IsReadOnly : False
IsFixedSize : True
IsSynchronized : False
Count : 2
这些是命令...
$usrProfile = @( )
$usrProfile = ,(funcUpdateUserProfile "user1" 4567 $usrProfile)
$usrProfile.count
$usrProfile = ,(funcUpdateUserProfile "user1" 1234 $usrProfile)
$usrProfile.count
$usrProfile = ,(funcUpdateUserProfile "user1" 2300 $usrProfile)
$usrProfile.count
$usrProfile = ,(funcUpdateUserProfile "user2" 6688 $usrProfile)
$usrProfile.count
$usrProfile = ,(funcUpdateUserProfile "user2" 7009 $usrProfile)
$usrProfile.count
$usrProfile
我已经花了几天时间,但没有取得任何进展....提前感谢和感谢任何能发现我做错的人......这是代码......
function funcUpdateUserProfile ($userName, $tmpINTEventID, $tmpUserProfileArray) {
$Global:updUserProfileArray = @()
$initFlag = $false
$UpdUserFlag = $false
$tmpEventStr = $tmpINTEventID.tostring()
if ($tmpUserProfileArray.length -eq 0 ) {
$updUserProfileArray += ,( ("$userName" , "$tmpEventStr") )
$initFlag = $true
}else {
ForEach ($item in $tmpUserProfileArray) {
if ( ($item[0].toString()) -like "*$userName*" ) {
$UpdUserFlag = $true
$user = $item[0].toString()
$tmpOldStr = $item[1].toString()
$updStr = $tmpOldStr +','+ $tmpEventStr
$updUserProfileArray += ,( ($user, ("$updStr")) )
}elseif ( !(($item[0].toString()) -like "*$userName*") ) {
$user = $item[0].toString()
$tmpOldStr = $item[1].toString()
$updUserProfileArray += ,( ($user, ("$tmpOldStr")) )
}#End if Else
}#End ForEach
}#end IfElse
if ( ($initFlag -eq $false ) -AND ($UpdUserFlag -eq $false) ) {
$updUserProfileArray += ,( ($userName, "$tmpEventStr") )
}
return $updUserProfileArray
}
【问题讨论】:
-
这与您的问题无关,但有一点值得了解:
if ( ($initFlag -eq $false ) -AND ($UpdUserFlag -eq $false) )可以替换为if (-not $initFlag -AND -not $UpdUserFlag)或if (!$initFlag -AND !$UpdUserFlag)。
标签: arrays powershell multidimensional-array