我不明白为什么我的阵列会产生我无法使用的输出

时间:2017-09-14 19:09:02

标签: arrays powershell

我正在尝试创建可以使用Get-Computer处理的计算机列表。 以下是创建列表的两种方法。 我不明白为什么它们不同或者我如何才能使两种方法的结果具有相同的值。

我的代码是:

    $ComputerList1 = "WS7-HUR-MANAGER","WS7-HUR-NURSE"
    $ComputerList2 = Get-ADComputer -Filter {Name -like "WS7-HUR*"} | Select`   Name
    Get-Variable ComputerList1 | Select Name, Value
    Get-Variable ComputerList2 | Select Name, Value

输出:

Name              Value                                           
----              -----                                           
ComputerList1     {WS7-HUR-MANAGER, WS7-HUR-NURSE}                
ComputerList2     {@{Name=WS7-HUR-MANAGER}, @{Name=WS7-HUR-NURSE}} 

2 个答案:

答案 0 :(得分:3)

$ComputerList1包含一个字符串数组对象。 $ComputerList2包含由Get-ADComputer返回的自定义PowerShell对象,然后进行过滤以仅包含它的Name属性。

您可以通过将每个管道分配给Get-Member来看到两者之间的差异。

$ComputerList1 | Get-Member
$ComputerList2 | Get-Member

根据其他答案,您可以使用-ExpandProperty cmdlet的Select-Object开关获取对象的一个​​属性,并将其内容作为其新类型的对象返回。例如,如果属性包含字符串,那么您将获得一个字符串对象。 E.g:

 $ComputerList2 = Get-ADComputer -Filter {Name -like "WS7-HUR*"} | Select ExpandProperty Name

或者您也可以直接访问该属性并将其分配给变量:

$ComputerList2 = (Get-ADComputer -Filter {Name -like "WS7-HUR*"}).Name

答案 1 :(得分:1)

$ComputerList2 = Get-ADComputer -Filter {Name -like "WS7-HUR*"} | Select -ExpandProperty Name