我对变量感到困惑。
我有代码,我在下面一行:
$search = $Name.SelectedItem.Split('-')[$($Name.SelectedItem.Split('-').Count-1)]+'*'
此行无所作为,因为将选定的项目(我正在使用Dropdownbox)进行拆分并将其转移到$ search。
有趣的是,它确实做到了我想要做的事情。
当我输入$ search时,结果可能是例如:
里沃利街*
当我继续执行代码并在多个数组中使用$ search时,由于某种原因,它不起作用,因为它在foreach循环中找不到任何内容。我没有错误消息,甚至其中一个阵列中也没有Rue de Rivoli *,它也找不到任何东西。
当我替换上面的代码并将名称直接命名为$ search时,如下所示
$search = 'Rue de Rivoli*'
我在数组中的搜索有效。
我在这里想念什么?我做错了什么,但我不知道这是什么,有人可以帮我理解吗?
非常感谢您,
迈克
根据要求,此处提供更多代码。有很多事情要处理,这就是为什么我要缩短它。
Clear-Host
$search = $CreateNewUserFormDropDownBoxLocation.SelectedItem.Split('-')[$($CreateNewUserFormDropDownBoxLocation.SelectedItem.Split('-').Count-1)]+'*'
#$search = 'Rue de Rivoli*'
$AllLocations = (get-variable -Include USPennsylvaniaAve, USSixthStreet, USRodeoDrive, USOneMicrosoftWay,`
USNorthTantauAvenue, USMarketStreet, USMainStreet, USEmilyDrive,`
USCalle8, USBroadway, US18thStreetNW, UKOxfordStreet, UKDowningStreet,`
UKBondStreet, FRRuedeRivoli, FRChampsElysees, CHBahnhofstrasse,`
CA17thAvenue) | ? {$_.value -is [array]}
Foreach ($Array in $AllLocations)
{
if ($array.value -like $search)
{break}
}
$result = "`$$($array.name)"
$result
这即将成为一个函数,什么也不做,因为从selecteditem出发,将其拆开并在其后添加*,因此我可以搜索 带有通配符的名称。
我有几个数组,因此我只包括了必要的数组。下一步是遍历数组,一旦找到该项目,它将停止并给出结果。 这是我的测试代码,除了Clear-Host之后的那一行,它可以运行并满足我的要求。该代码已正确解析,并已添加到$ search中,但不起作用。 在该行代码下方,有我的作弊行,在该行中,我将正确的结果直接添加到变量中,并且效果很好。
答案 0 :(得分:1)
如所评论,这应该可以解决问题。
(我也将其添加为答案,因此OP可以接受它。否则,这个问题似乎仍然无法解决)
当对搜索字符串$search = 'Rue de Rivoli*'
进行硬编码时有效,但是使用Split()
来获取搜索字符串则无效,那么通常您使用split所获得的字符串会被空格字符包围。如果将其保留,则该字符串将出现看起来很好,但是在用作比较时将不起作用。
例如,如果完整的$CreateNewUserFormDropDownBoxLocation.SelectedItem
字符串为:
"François Exemple - Rue de Rivoli"
然后,使用$CreateNewUserFormDropDownBoxLocation.SelectedItem.Split("-")[-1]
将返回:
" Rue de Rivoli"
注意前面的空格。
只需执行Trim()
,您将摆脱空间。
因此,该行应为:
$search = ($CreateNewUserFormDropDownBoxLocation.SelectedItem.Split('-')[-1]).Trim() + '*'