将select的结果转换为数组

时间:2013-02-24 03:42:55

标签: powershell

我有以下代码。

$l = @("A", "B", "X", "Y")
echo "A,B,X`n1,2,3,4" > .\myFile # Create test file

$f = cat myFile | ConvertFrom-Csv | gm -MemberType NoteProperty | select Name
compare $l $f

$a = .... # convert $f to array
compare $l $a

如何将$f转换为数组,以便与数组进行比较?支撑@(...)不起作用。

比较$l$f时,我得到了以下结果。

PS C:\Users\nick> compare $l $f

InputObject                                                 SideIndicator
-----------                                                 -------------
@{Name=A}                                                   =>
@{Name=B}                                                   =>
@{Name=X}                                                   =>
A                                                           <=
B                                                           <=
X                                                           <=
Y                                                           <=

4 个答案:

答案 0 :(得分:5)

select Name替换为select -Expand NameForEach-Object { $_.Name }

答案 1 :(得分:1)

另一种方法,如果您希望从单个属性获取数组,则可以使用Select中的“ExpandProperty”开关,如下所示:

$f = cat myFile | ConvertFrom-Csv | gm -MemberType NoteProperty | Select -ExpandProperty Name

答案 2 :(得分:0)

您可以将两个对象都转换为ArrayLists然后进行比较。

[System.Collections.ArrayList]$array1 = $l
[System.Collections.ArrayList]$array2 = $f

答案 3 :(得分:0)

试试这个:

$a = New-Object System.Collections.ArrayList;
$f | % { $null = $a.Add($_.Name); }
compare $l $a;