Я создаю объект PSCustom с некоторыми свойствами и добавляю его в коллекцию.
короче как
$Collection = @()
foreach ($item in $items)
{
$obj = New-Object PSCustomObject
$obj | Add-Member -NotePropertyName Property1 -NotePropertyValue ""
$obj | Add-Member -NotePropertyName Property2 -NotePropertyValue ""
$obj | Add-Member -NotePropertyName Property3 -NotePropertyValue ""
$Collection += $obj
}
это было нормально до сих пор и работало. Пока я не захотел что-то удалить из него. я получил сообщение, что op_substraction не является методом.
хорошо, я погуглил и обнаружил, что могу объявить коллекцию вот так
$Collection = New-Object System.Collections.Generic.List[System.Object]
я меняю += на $Collection.Add($obj) теперь, когда я сделал $Collection.Remove($obj), я не получил ошибку, но объект не был удален.
я погуглил еще и нашел [System.Collections.ArrayList] прежде всего еще одну информацию.. у меня есть следующий код для удаления объекта ($MyItem содержит информацию, какой объект не следует удалять)
foreach ($Item in $Collection)
{
if ($MyItem -notcontains $Item.Value)
{
$Collection.Remove($Item)
}
}
поэтому, если бы я сделал это, выдается ошибка, что $Collection была изменена. Хорошо, поэтому я клонирую список проектов. Я нашел код на SO и немного изменил его.
function clone-Collection($obj)
{
$newobj = New-Object System.Collections.Generic.List[System.Object]
foreach ($oobj in $obj)
{
$nobj = New-Object PsObject
$oobj.psobject.Properties | % { Add-Member -MemberType NoteProperty -InputObject $nobj -Name $_.Name -Value $_.Value }
$newobj.Add($nobj)
}
return $newobj
}
я вызываю функцию и в функции все в порядке. Но у ReturnValue теперь есть 0,1,2,... в начале. я не знаю почему. Я хотел бы подавить это.
далее я прочитал здесь, что [System.Collections.ArrayList] устарел.
так что я совсем потерялся. должен ли я даже использовать ArrayList, если да, то как мне избавиться от чисел, если я не должен использовать ArrayList, что является правильной альтернативой. или я делаю что-то основное неправильно?
пожалуйста, помогите мне.
Спасибо! С уважением
Add()
выводит индекс в списке массивов (0,1,2..). Вы можете скрыть это, используя$null = $newobj.Add($nobj)
или[void]$newobj.Add($nobj)
- person Theo   schedule 15.03.2021