2016-11-23 5 views
0

Я собрал ниже, что делает работу. Однако выход не очень работоспособен. Поэтому я хотел вывести все это в CSV, используя Export-Csv. Im знаю, что я могу сделать это, перейдя к запросу ForEach-Object, но я не совсем уверен, как этого достичь.Сценарий требует конвертации для экспорта в CSV

Я добавил попытку конвертировать его в надежде на небольшую помощь. Я не уверен, как указать переменную для каждого объекта. Например, первая секция вызывает все домены в лесу. Как я могу использовать каждый ответ в следующем запросе на канал? и так далее.

$domains = (Get-ADForest).Domains 
$controllers = @() 
$worked = $false 

foreach ($domain in $domains) { 
    $controller = Get-ADDomainController -Discover -ForceDiscover -DomainName $domain | 
        Select-Object HostName 
    $controllers += $controller 
} 
while (-not $worked) { 
    try { 
     foreach ($item in $controllers) { 
      $value = $item.HostName.Value 
      Write-Host $value 
      Write-Host 'Domain Admins' 

      Get-ADGroupMember -Identity 'Domain Admins' -Server $value | 
       Get-ADUser -Properties name, samaccountname, Description, EmailAddress | 
       Where {$_.Enabled -eq $true} | 
       Format-Table Name, SamAccountName, Description, EmailAddress -AutoSize 
     } 
     $worked = $true 
    } catch {} 
} 

Конверсия Покушение

ForEach-Object{ 
(Get-ADForest).domains | Get-ADDomainController -Discover -ForceDiscover -DomainName $domain |Select-Object HostName | Get-ADGroupMember -identity 'Domain Admins' -Server $value | Get-ADUser -Properties samaccountname, Description, EmailAddress | Where {$_.Enabled -eq $true} 
}| Export-Csv -Path "$HOME/Desktop/DomainAdmins.csv" samaccountname, Description, EmailAddress -AutoSize 
+0

Заменить 'Format-Table' с' Экспортно-Csv -Append'. –

+0

также, почему вы используете $? это не имеет никакого смысла. – 4c74356b41

+0

@ 4c74356b41 Взгляните на третью линию снизу. Эта переменная используется для завершения цикла 'while' после того, как цикл foreach запущен без завершающей ошибки. Немного неудобно, но должно работать. –

ответ

0

Если вы можете получить значения из вашего Get-ADUser вызов и поместить их в объект, вы можете затем передать в ConvertTo-CSV.

Вот пример:

$arr = @([pscustomobject]@{name="name"; sam="samaccountname"}, [pscustomobject]@{name="name2"; sam="samaccountname2"}); 

$arr | ConvertTo-Csv -NoTypeInformation 
"name","sam" 
"name","samaccountname" 
"name2","samaccountname2" 

Вы можете избавиться от вызова Format-Table. Код, который я показал в примере pipe и массив объектов в командлет convertto-csv. Поэтому, если Get-ADUser возвращает объекты, вы должны иметь возможность напрямую обращаться к ConvertTo-CSV или Export-Csv -append

Объекты являются hashtables, которые передаются в pscustomobjects, это хороший быстрый способ проиллюстрировать технику.

В результате, как показано, будут заголовки csv, которые соответствуют вашим клавишам хеш-таблицы, а hastable значениями будут значения CSV.

0

Это работает хорошо в моей местной окружающей среды и сохранения результата в D: \ Test_File.csv

$domains = (Get-ADForest).Domains 
$controllers = @() 
$worked = $false 
foreach ($domain in $domains) { 
$controller = Get-ADDomainController -Discover -ForceDiscover -DomainName $domain | Select-Object HostName 
$controllers += $controller 
} 
while (-not $worked) { 
try 
{ 
    foreach ($item in $controllers) 
     { 
     $value = $item.HostName.Value 
     Write-Host $value 
     Write-Host 'Domain Admins' 
     Get-ADGroupMember -Identity 'Domain Admins' -Server $value | 
      Get-ADUser -Properties name, samaccountname, Description, EmailAddress |?{$_.Enabled -eq $true}|Export-Csv -Append "D:\Test_File.csv" 
     } 
    #$worked = $true 
} 
catch 
{ 
$Error_Message=$_.Exception.Message 
} 
} 
+0

Это частично работает, im только получая данные из объекта Get-ADUser, Id хочет, чтобы все данные вошли в csv. Таким образом, это будет включать имя домена, возможно, как coloum в csv? – iNoob

+0

@iNoob: Вы можете использовать ** Get-ADDomain ** для имени домена, и вы можете добавить это в файл CSV, например, «| Export-Csv -Append» D: \ Test_File.csv »« Вы можете использовать ' (Get-WmiObject Win32_ComputerSystem) .Домой ', чтобы получить текущую систему, находится в каком домене, и вы можете добавить его в CSV. –