пытаться сделать это в комментариях ... сложно.[ ухмылка ]
вот пример того, что я подразумеваю под словом "делать это по одной строке за раз" в цикле foreach
...
# fake reading a list of systems from a text file
# in real life, use Get-Content
$ComputerList = @'
pc01
pc02
pc03
pc04
pc05
pc666
'@ -split [environment]::NewLine
# fake getting a list of Computers & the groups they are in
# in real life, use Get-ADComputer & the ".MemberOf" property
$GroupMembershipLookup = @{
'pc01' = @('GroupA', 'GroupB')
'pc02' = @('GroupB', 'GroupC', 'GroupD')
'pc03' = @('GroupA', 'GroupB', 'GroupE')
'pc04' = @('GroupZ')
}
$NoGroupFound = '__No Group Found__'
$Results = foreach ($CL_Item in $ComputerList)
{
# use a real call to Get-ADComputer here [*grin*]
# pro'ly something like "(Get-ADComputer $CL_Item -Property MemberOf).MemberOf -join '; '"
$GroupList = $GroupMembershipLookup[$CL_Item] -join '; '
if ([string]::IsNullOrEmpty($GroupList))
{
$GroupList = $NoGroupFound
}
[PSCustomObject]@{
ComputerName = $CL_Item
GroupMembership = $GroupList
}
}
# on screen
$Results
# to CSV
$Results |
Export-Csv -LiteralPath "$env:TEMP\Del_GroupMembershipList.csv" -NoTypeInformation
на экране вывода ...
ComputerName GroupMembership
------------ ---------------
pc01 GroupA; GroupB
pc02 GroupB; GroupC; GroupD
pc03 GroupA; GroupB; GroupE
pc04 GroupZ
pc05 __No Group Found__
pc666 __No Group Found__
CSV-контент ...
"ComputerName","GroupMembership"
"pc01","GroupA; GroupB"
"pc02","GroupB; GroupC; GroupD"
"pc03","GroupA; GroupB; GroupE"
"pc04","GroupZ"
"pc05","__No Group Found__"
"pc666","__No Group Found__"
что делает вышеперечисленное ...
- создает массив системыимена , как если бы были прочитаны с помощью
Get-Content
- , создает таблицу поиска , как если бы один использовал
Get-ADComputer
, чтобы получить членство в группе для каждой системы - сделал значение "not found" и сохранил его в $ Var для повторного использования
- , повторяемый через
$ComputerList
collection - , захватил список / массив групп и преобразовалих в строку с разделителями точкой с запятой
- , проверенную на "группы не найдены" и добавленную ранее сохраненное значение, если список пуст
- , построил
[PSCustoObject]
и отправил его в выходной поток - захватил поток вывода в массив с именем
$Results
все за один раз , чтобы избежать штрафа +=
массива - displayed результаты на экране
- отправили коллекцию
$Results
в файл CSV