我有一个自定义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
}
答案 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
}