0

我有以下代码片段

$dllCheckList = import-csv "c:\path\dllCheckList.csv" 
#dllCheckList.csv contains two items 'test1.dll' , 'test2.dll'

$resultsArray1 = @("test2.dll","test3.dll")
$resultsArray2 = @("test3.dll","test4.dll")
$resultsArray3 = @("test1.dll","test2.dll")

我将使用什么样的比较/循环,以便$resultsArray1写入test2.dll$resultsArray2不写入任何内容并$resultsArray3写入test.dll, test2.dll

4

3 回答 3

3

我建议使用Compare-Object <array1> <array2> -passthru -excludeDifferent -includeEqual

于 2013-10-31T22:00:41.253 回答
0

假设输出$resultsArray3应该是test1.dll, test2.dll而不是test.dll, test2.dll,并且假设这c:\path\dllCheckList.csv是一个带有标题的实际 CSV,我将使用-containsand-join运算符:

PS C:\> $resultsArray1 = @("test2.dll","test3.dll")
PS C:\> $resultsArray2 = @("test3.dll","test4.dll")
PS C:\> $resultsArray3 = @("test1.dll","test2.dll")
PS C:\> cat 'C:\path\dllCheckList.csv'
Libs
test1.dll
test2.dll
PS C:\> $dllCheckList = Import-Csv 'C:\path\dllCheckList.csv' | % { $_.Libs }
PS C:\> $dllCheckList
test1.dll
test2.dll
PS C:\> ($resultsArray1 | ? { $dllCheckList -contains $_ }) -join ', '
test2.dll
PS C:\> ($resultsArray2 | ? { $dllCheckList -contains $_ }) -join ', '

PS C:\> ($resultsArray3 | ? { $dllCheckList -contains $_ }) -join ', '
test1.dll, test2.dll
于 2013-11-01T00:13:12.557 回答
0

一种方法是使用从您的 csv 数据动态构建的正则表达式,然后将其与 -match 一起用于您的每个数组。这样可以节省遍历 csv 中的每个条目的每个数组。不确定你的 csv 是什么样的,但你需要导入它,然后首先构建一个包含所有 dll 名称的数组,或者修改它以直接使用 csv 代替数组。

#$dllCheckList = import-csv "c:\path\dllCheckList.csv" 
#dllCheckList.csv contains two items 'test1.dll' , 'test2.dll'

$dll_checklist = @('test1.dll','test2.dll')


$resultsArray1 = @("test2.dll","test3.dll")
$resultsArray2 = @("test3.dll","test4.dll")
$resultsArray3 = @("test1.dll","test2.dll")

[regex] $dll_regex = ‘(?i)^(‘ + (($dll_checklist |foreach {[regex]::escape($_)}) –join “|”) + ‘)$’

$resultsArray1,$resultsArray2,$resultsArray3 |
foreach {$_ -match $dll_regex}

test2.dll
test1.dll
test2.dll

可以在这里找到创建正则表达式的行的解释:http: //blogs.technet.com/b/heyscriptingguy/archive/2011/02/18/speed-up-array-comparisons-in-powershell-with-一个运行时正则表达式.aspx

于 2013-10-31T22:25:18.590 回答