Powershell对变量的困惑

时间:2019-02-21 05:50:27

标签: powershell variables

我对变量感到困惑。

我有代码,我在下面一行:

$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中,但不起作用。 在该行代码下方,有我的作弊行,在该行中,我将正确的结果直接添加到变量中,并且效果很好。

1 个答案:

答案 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() + '*'