2017-11-28 2 views
1

Ich versuche, ein benutzerdefiniertes Objekt in eine CSV-formatierte Textdatei auszugeben, wie ich für jedes durch eine Schleife. Ein Objekt pro Zeile.Powershell benutzerdefinierte Append-Objekt an CSV-Datei

Aber nichts wird in die Datei geschrieben.

Ist es etwas mit Arten konvertiert werden?

$rechten = Get-ADGroupMember -Identity $v -Recursive -ERRORACTION silentlycontinue | Get-ADUser -Property DisplayName -ERRORACTION silentlycontinue | Select-Object Name 

Write-Host -ForegroundColor Yellow "ADgroup $v wordt uitgevlooid." 

foreach ($rechtenhouder in $rechten) { 
    $objResults = New-Object PSObject 
    $objResults | Add-Member -MemberType NoteProperty -Name DirectoryPath -Value $objPath 
    $objResults | Add-Member -MemberType NoteProperty -Name Identity -Value $rechtenhouder.name 
    $objResults | Add-Member -MemberType NoteProperty -Name Systemrights -Value $accessRight.FileSystemRights 
    $objResults | Add-Member -MemberType NoteProperty -Name systemrightstype -Value $accessRight.accesscontroltype 
    $objResults | Add-Member -MemberType NoteProperty -Name isinherited -Value $accessRight.isinherited 
    $objResults | Add-Member -MemberType NoteProperty -Name inheritanceflags -Value $accessRight.inheritanceflags 
    $objResults | Add-Member -MemberType NoteProperty -Name rulesprotected -Value $objACL.areaccessrulesprotected 
    $objResults | Add-Member -MemberType NoteProperty -Name Adtype -Value "User" 

    $arrResults += $objResults 
    Add-Content $exportpathtxtappend $objresults 
} 
+0

Statt Hunderte von Zeilen hinzufügen noteproperties schreiben, könnten Sie einfach Ihr Objekt mit '$ objResult = New-Object psobject @ {DirectoryPath = erstellen $ objPath; Identity = "und so weiter ...."} ' – Clijsters

+0

Und verwende' Add-Content' nicht dafür. [Export-CSV] (https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/export-csv?view=powershell-5.1) ist dein Freund. – Clijsters

+0

Ich wollte ac verwenden, denn wenn das Skript aus welchem ​​Grund auch immer unterbrochen wird, hätte ich schon etwas in der Datei ausgegeben. – woef

Antwort

0

Zuerst schlage ich vor, Sie Ihr Objekt in einer anständigen intelligentere Weise zu erstellen:

foreach ($rechtenhouder in $rechten) { 
    $objResults = New-Object PSObject -Property @{ 
     DirectoryPath = $objPath; 
     Identity   = $rechtenhouder.name; 
     Systemrights  = $accessRight.FileSystemRights; 
     systemrightstype = $accessRight.accesscontroltype; 
     isinherited  = $accessRight.isinherited; 
     inheritanceflags = $accessRight.inheritanceflags; 
     rulesprotected = $objACL.areaccessrulesprotected; 
     Adtype   = "User"; 
    } 
    $arrResults += $objResults 
} 

damit fertig, Ihre $arrResults enthält jetzt Ihre Objekte. Dies kann leicht in CSV-Dateien exportiert mit PowerShells Export-CSV builtin:

$arrResults | Export-Csv -Path "C:/temp/text.csv" 

Mit Add-Content auf jeder Schleife Iteration in Bezug auf Leistung IMHO unwirksam ist. Wenn Ihr Skript für eine lange Zeit ausgeführt wird und Sie den aktuellen Status in Intervallen speichern möchten, können Sie z. einen asynchronen Job starten - wir jeden 10. Iteration sagen - Ihre aktuelle Array exportieren:

$i = 0 
foreach ($rechtenhouder in $rechten) { 
    $objResults = New-Object PSObject -Property @{ 
     DirectoryPath = $objPath; 
     Identity   = $rechtenhouder.name; 
     Systemrights  = $accessRight.FileSystemRights; 
     systemrightstype = $accessRight.accesscontroltype; 
     isinherited  = $accessRight.isinherited; 
     inheritanceflags = $accessRight.inheritanceflags; 
     rulesprotected = $objACL.areaccessrulesprotected; 
     Adtype   = "User"; 
    } 
    $arrResults += $objResults 
    if ($i % 10 -eq 0) { 
     Start-Job -ScriptBlock { 
      param($T, $Path) 
      $T | Export-Csv -Path $Path 
     } -ArgumentList @($arrTest, "Path/to/script") 
    } 
    $i++ 
} 
+0

wie diese asynchrone Job-Idee! Ich habe noch nie mit Start-Job gearbeitet. In text.csv wird nur eine Zeile hinzugefügt. Ich muss in den Skriptblock-Parametern herumspielen/fehlen. $ arrResults | out-file $ exportPathtxt hat sich als eine weitere Textdatei ausgegeben. – woef

+0

Freut mich zu hören! Bitte denken Sie daran - wenn die Schleife schneller ist als erwartet, ist es möglich, dass Sie jeden 10. Job an jeden 20. Job anpassen müssen. Wenn nicht, treten Nebenläufigkeitsprobleme auf. Vergessen Sie auch nicht, nach der Schleife ein letztes Mal zu exportieren. Wenn nicht, werden Sie einige Einträge verpassen. Ich hoffe es hilft. – Clijsters

+0

Ich habe ein Pfadargument zum Skriptblock hinzugefügt. – Clijsters

Verwandte Themen