2017-11-28 22 views
1

私はそれぞれをループしながら、カスタムオブジェクトをCSV形式のテキストファイルに出力しようとしています。 1行に1つのオブジェクト。Powershell custom csvファイルへのオブジェクトの追加

ただし、ファイルには何も書き込まれません。

変換するタイプのものですか?

$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

代わりnotepropertiesを追加する数百行を書いて、あなただけの '$ objResult =新オブジェクトpsobjectの@ {directorypathに=を使用してオブジェクトを作成することができます$ objPath; Identity = "など... ...."} ' – Clijsters

+0

それに' Add-Content'を使わないでください。 ['Export-CSV'](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/export-csv?view=powershell-5.1)はあなたの友人です。 – Clijsters

+0

私はacを使いたかったのですが、可能な限りスクリプトが中断された場合、私はすでにファイルに何らかの出力があったでしょうから。 – woef

答えて

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 
} 

、あなたの$arrResultsは今、あなたのオブジェクトが含まれています。これは、簡単にPowerShellsをCSVファイルにエクスポートすることができExport-CSVを組み込み:すべてのループの繰り返しでAdd-Contentを使用して

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

は、パフォーマンスに関する私見無効です。スクリプトが長時間実行されていて、現在の状態を間隔で保存したい場合は、たとえば次のようにします。非同期ジョブを開始 - さんは10番目ごとの繰り返しをしましょう - あなたの現在の配列をエクスポート:

$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

そのような非同期の仕事のアイデア!私は初心者で働いたことがありません。 text.csvには1行しか追加されません。私はscriptblockのパラメータを混乱/欠落している必要があります。 $ arrResults | out-file $ exportPathtxtは、別のテキストファイルをexpetedとして処理しました。 – woef

+0

聞いてうれしい!ループが私が期待していたよりも速ければ、「10回目」のジョブを20回ごとに調整する必要があることに注意してください。そうでない場合は、並行性の問題が発生します。また、最後のループの後にエクスポートすることを忘れないでください。もしそうでなければ、あなたはいくつかのエントリーを欠場するでしょう。それが役に立てば幸い。 – Clijsters

+0

スクリプトブロックにパス引数を追加しました。 – Clijsters

関連する問題