我使用以下代码创建了以下两个大型数组:
$VPX_ENTITY = Invoke-Sqlcmd -Database $vc_DB_Name -ServerInstance $vc_DB_Server -Username $vc_DB_User -Password $vc_DB_Pass -Query $VPX_ENTITY_QUERY
$VPX_VM = Invoke-Sqlcmd -Database $vc_DB_Name -ServerInstance $vc_DB_Server -Username $vc_DB_User -Password $vc_DB_Pass -Query $VPX_VM_QUERY
因为我在查询SQL DB,所以数组项都是数据行。我需要对阵列进行过滤,但不会创建性能。这是我现在拥有的一个例子。
foreach ($VM in $VPX_VM){
$VM_NAME = ($VPX_ENTITY | Where {$_.ID -eq $VM.ID} | Select -First 1).NAME}
这个工作并且相当快,但是这只是我将过滤的属性之一并且有20k个对象要循环。要运行整个脚本,它需要接近一个小时,我需要大幅改进或转向另一条路线。
我是否需要将数据行转换为字符串以提高速度?我可以改进上面的代码并使其更快吗?
我尝试使用:
$VM_NAME = ($VPX_ENTITY.Get($VM.ID)).NAME
然而,回来的结果总是不正确的。任何帮助将不胜感激。
答案 0 :(得分:0)
请检查:http://www.spjeff.com/2015/04/21/datatable-in-powershell-for-crazy-fast-filters/
使用Datatables和DataView。 DataView中的“.RowFilter”过滤器比其他过滤器更快。唯一的问题是你可以过滤一个字段。