2017-11-28 3 views
1

각 개체에 대한 루프를 통해 사용자 지정 개체를 CSV 형식의 텍스트 파일로 출력하려고합니다. 한 줄에 하나의 개체.Powershell 사용자 지정 추가 개체를 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

을, 당신은 단지 $ objResult = 새-개체 psobject의 @ {DirectoryPath ='와 개체를 만들 수 있습니다 $ objPath; Identity = "and so on ...."}' – 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가 Export-CSV를 내장이 쉽게 CSV 파일로 내보낼 수 있습니다

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

마다 루프 반복에 Add-Content를 사용하면 성능에 관한 이럴 효과가있다. 스크립트가 오랫동안 실행되고 있고 현재 상태를 일정 간격으로 저장하려는 경우 다음과 같이 할 수 있습니다. 모든 10 반복의 말을하자 - - 비동기 작업을 시작하여 현재 배열 수출 : noteproperties를 추가 라인의 수백을 쓰는 대신

$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에는 한 줄만 추가됩니다. 나는 scriptblock 매개 변수가 엉망이거나 빠져 있어야합니다. $ arrResults | out-file $ exportPathtxt는 다른 텍스트 파일을 expeted 한 것처럼 정리했습니다. – woef

+0

듣기 좋습니다! 루프가 예상보다 빨라지면 모든 '10 번째 작업을 매 20 번째 작업마다 조정해야합니다. 그렇지 않으면 동시성 문제가 발생합니다. 또한 루프를 마지막으로 내보내기하는 것을 잊지 마십시오. 그렇지 않으면 몇 가지 항목을 놓치게됩니다. 희망이 도움이됩니다. – Clijsters

+0

scriptblock에 경로 인수를 추가했습니다. – Clijsters

관련 문제