Arrays 如何在powershell中筛选阵列

Arrays 如何在powershell中筛选阵列,arrays,string,powershell,filter,Arrays,String,Powershell,Filter,例如,我在Powershell中有一个带有一些字符串的数组 $StringArray = {"all_srv_inf", "all_srv_inf_vir", "all_srv_inf_vir_vmw", "all_srv_rol", "all_srv_rol_iis", "all_srv_rol_dc"} 我想过滤数组中的所有字符串,因此只剩下最唯一的字符串 因此,在上面的示例中,我必须过滤“all_srv_inf”、“all_srv_inf_vir”和“all_srv_rol”,从而生成一

例如,我在Powershell中有一个带有一些字符串的数组

$StringArray = {"all_srv_inf", "all_srv_inf_vir", "all_srv_inf_vir_vmw", "all_srv_rol", "all_srv_rol_iis", "all_srv_rol_dc"}
我想过滤数组中的所有字符串,因此只剩下最唯一的字符串

因此,在上面的示例中,我必须过滤“all_srv_inf”、“all_srv_inf_vir”和“all_srv_rol”,从而生成一个只有以下值的字符串数组:“all_srv_inf_vir_vmw”、“all_srv_rol_iis”和“all_srv_rol_dc”

这个列表实际上要长得多,所以我想知道过滤我的Powershell字符串数组最有效的方法是什么


谢谢。

您的变量不包含实际的数组,而是一个在调用时生成数组的脚本块

有很多方法可以过滤字符串,你可以在SO或Google上搜索。您可以使用
Measure命令{#your code}
尝试一些解决方案,以查看需要多长时间并比较结果

我的前两个想法是使用
-notmatch
-notcontains/-notin
-notmatch
使用通常更快的正则表达式,因此我将从它开始。另一种解决方案可能更适合您,具体取决于您输入的数据等。因此,您应该尝试不同的方法并对其进行测量

带有
-不匹配
的示例:

$StringArray = "all_srv_inf", "all_srv_inf_vir", "all_srv_inf_vir_vmw", "all_srv_rol", "all_srv_rol_iis", "all_srv_rol_dc"

#Build regex for items to exclude
$exclude = ('all_srv_inf', 'all_srv_inf_vir','all_srv_rol' | ForEach-Object { "^$([regex]::Escape($_))$" }) -join '|'

#Filter stringarray
$StringArray -notmatch $exclude

谢谢弗罗德。我向你保证我在这方面花了很多时间。创建了一些函数来处理它,whuch检查了数组并检查字符串是否是数组中某个字符串的子字符串。无论如何,将必须排除在单独数组中的“顶级”字符串放入单独数组的解决方案运行得非常快。再次感谢。如果下面的答案对你有帮助,请考虑投票。