从自定义对象中选择对象

时间:2016-01-17 12:48:19

标签: powershell

我有一个自定义PS对象,如下所示:

ID                           Folder
MyServer01                   \\Server\Share\Share\MyServer01
MyServer02                   \\Server\Share\Share\MyServer02

当然,对象本身相当大,有1000多个条目。我需要能够根据查询ID来选择对象的特定行。

我认为这样的事情会起作用,但我运气不好:

$obj | Select-Object | Where-Object ($_.ID -eq "MyServer01")

我需要它来返回整行,所以上面(假设它有效)会返回:

MyServer01                   \\Server\Share\Share\MyServer01

编辑:

foreach ($mf in $Folders.Tables[0]) {
    $Info = New-Object System.Object
    $Info | Add-Member -Type NoteProperty -Name ID -Value $mf.ID
    $Info | Add-Member -Type NoteProperty -Name Folder -Value $mf.Folder
    $obj += $Info
}

1 个答案:

答案 0 :(得分:3)

使用哈希表存储对象:

$obj = @{}
foreach ($mf in $Folders.Tables[0]) {
    $Info = New-Object -Type System.Object
    $Info | Add-Member -Type NoteProperty -Name ID -Value $mf.ID
    $Info | Add-Member -Type NoteProperty -Name Folder -Value $mf.Folder
    $obj[$mf.ID] = $Info
}

不要在循环中附加到数组,因为它往往表现不佳。

如果您的代码不依赖于明确创建的对象System.Object,我还建议将它们创建为自定义对象:

$obj = @{}
foreach ($mf in $Folders.Tables[0]) {
    $Info = New-Object -Type PSCustomObject -Property @{
      'ID'     = $mf.ID
      'Folder' = $mf.Folder
    }
    $obj[$mf.ID] = $Info
}