2016-11-23 3 views
0

zu konvertieren Ich stelle das unten, das macht den Job. Die Ausgabe ist jedoch nicht sehr praktikabel. Also wollte ich das alles in eine CSV mit Export-Csv ausgeben. Ich bin mir bewusst, dass ich dies tun kann, indem ich auf eine ForEach-Object Abfrage umschalte, aber ich bin nicht ganz sicher, wie man das erreicht.Skript muss konvertiert werden, um in CSV

Ich habe einen Versuch hinzugefügt, es in der Hoffnung auf ein wenig Hilfe zu konvertieren. Ich bin mir nicht sicher, wie man die Variable für jedes Objekt spezifiziert. Zum Beispiel ruft der erste Abschnitt alle Domänen in der Gesamtstruktur auf. Wie verwende ich jede Antwort in der nächsten übermittelten Abfrage? und so weiter.

$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 {} 
} 

Conversion Versuch

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

Ersetzen 'Format-Table' mit' Export-Csv -Append'. –

+0

auch, warum verwenden Sie $ gearbeitet? das macht keinen Sinn. – 4c74356b41

+0

@ 4c74356b41 Werfen Sie einen Blick auf die dritte Zeile von unten. Die Variable wird verwendet, um die "while" -Schleife zu beenden, nachdem die foreach-Schleife ohne einen Abschlussfehler gelaufen ist. Ein bisschen peinlich, aber sollte funktionieren. –

Antwort

0

Wenn Sie die Werte von Ihrem Get-ADUser Anruf und sie in ein Objekt setzen, können Sie dann Rohr convertto-csv bekommen.

Hier ist ein Beispiel:

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

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

Sie könnten das Format-Table Ruf loszuwerden. Der Code, den ich im Beispiel Pipes und Array von Objekten im Cmdlet convertto-csv gezeigt habe. Wenn also Get-ADUser Objekte zurückgibt, sollten Sie in der Lage sein, direkt in ConvertTo-CSV oder Export-Csv -appen

Die Objekte sind Hashtables, die in pscustomobjects umgewandelt werden, es ist eine nette schnelle Möglichkeit, die Technik zu veranschaulichen.

Das Ergebnis sind, wie gezeigt, CSV-Header, die Ihren Hashtable-Schlüsseln entsprechen, und die hastierbaren Werte sind die CSV-Werte.

0

Dies funktioniert gut in meinem lokalen Umfeld und Speichern des Ergebnisses in 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

Dies funktioniert teilweise, ich bekomme nur die Daten aus dem Get-ADUser-Objekt, ID möchten alle Daten in die CSV gehen. Das würde also den Domainnamen beinhalten, vielleicht als Kolumne in der CSV? – iNoob

+0

@iNoob: Sie können ** Get-ADDomain ** für den Domain-Namen verwenden und Sie können das in der CSV-Datei anhängen wie "| Export-Csv -Append" D: \ Test_File.csv "" Sie können ' (Get-WmiObject Win32_ComputerSystem) .Domain ', um das aktuelle System zu erhalten, unter welcher Domäne und Sie können das gleiche in der CSV anhängen. –

Verwandte Themen