Привет, я создал сценарий ниже для проверки локальных групп администраторов на удаленных хостах. Он работает нормально, но поскольку он выводит данные только после того, как он прошел через все хосты, я боюсь, что у массива закончится буферное пространство, прежде чем он сможет экспортировать в csv, поэтому я пытался создать его и добавлять выходные данные от каждого хоста, поскольку он проходит через список, за исключением того, что я не могу получить заголовки для отображения в первой строке и добавить дополнительные строки под ним. Ниже представлен вывод, который я получаю, когда я пытаюсь выполнить append. Курсивные слова должны быть заголовками, а другая информация должна быть указана в следующей строке. Что я делаю не так?Ошибка в выпуске вывода CSV
@ {Сервер = pc1; Участники = Администратор; DistinguishedName = DC = Domain, DC = com
Вот как это должно выглядеть. Это выглядит так, если я не добавлять и я пусть это создать CSV-файл после того, как он закончил идти по списку хостов
Server Members DistinguishedName
host1 Administrator;Admin2 DC=DOMAIN,DC=COM
$servers= get-content "C:\Scripts\AD Audits\Local Admin\workstations.txt"
$output = "c:\temp\local admin audit $CurrentDate.csv"
$results = @()
$disconnected = "Did not respond"
foreach($server in $servers)
{
$connected = Test-Connection $server -count 1 -quiet
if ($connected) {
"$server responded" | Out-File -append "c:\temp\LocalAdmin goodhosts $CurrentDate.txt"}
else {
"$server did not respond" | Out-File -append "c:\temp\LocalAdmin badhosts $CurrentDate.txt"}
$group =[ADSI]"WinNT://$server/Administrators"
$members = $group.Members() | foreach {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null) }
$results += New-Object PsObject -Property @{
DistinguishedName = (get-adcomputer ($server) -properties * | select distinguishedname).distinguishedname
Server = $server
Members = $members -join ";"
}
$results | Export-Csv $Output -NoTypeInformation
}`
if($connected -eq $True) { New-Object PSObject -Property @{ DistinguishedName = (Get-ADComputer $_).DistinguishedName Server = $_ Members = $members -join ";" }} else {write-host ""}
что швы на работу, за исключением того, что компьютеры, к которым не подключен сценарий, все еще записываются в csv с ложной информацией от предыдущего хоста, который отвечал. Трубопровод имеет смысл. Я действительно начинаю понимать некоторые из этих вещей. Вместо использования ($ server in $ servers) вы используете одну запись ($ _) для каждой строки. – user2402045
Вы можете поместить новое создание psobject внутри оператора IF, который проверяет, может ли связанный компьютер быть подключен. –
Это сработало отлично! Я добавил модификацию if в нижнюю часть моего исходного вопроса. Вероятно, это был не самый чистый способ добавить его, но он отлично поработал. Был бы лучший способ для меня сделать это? – user2402045