2017-12-28 8 views
-2

입력 반복 수출하지 내측 부재를 추가외부 foreach 루프는 CSV에

서버 : [1,2,3]
서비스 : A, B, C]을

[서버 1은 "A"
서버 (2)는 "B"를 서비스 "A"를 갖는 서비스가
서버 (3)가 서비스 "B", "C"가

CSV에서

기대 출력 (콘솔 올바른 출력을 준) :

CSV의 51,515,
 
Server_Name ServerAvailability ServiceName[0] ServiceStatus[0] ServiceName[1] ServiceStatus[1] 
1 Up a Running 
2 Up a Running b Running 
3 Up b Running c Running 

실제 출력 :

 
Server_Name ServerAvailability ServiceName[0] ServiceStatus[0] ServiceName[1] ServiceStatus[1] 
1 Up a Running 
2 Up a Running 
3 Up b Running 
foreach ($s in $servers) { 
    foreach ($srv in $services) { 
     $Asrv = Get-Service -Name $srv -ComputerName $s 
     if ($Asrv -ne $null) { 
      $HashSrvs.Add($Asrv.Name, $Asrv.Status) 
     } 
    } 

    $infoObject = @() 
    $infoObject = New-Object PSObject 
    $infoObject | Add-Member -MemberType NoteProperty -Name "Server name" -Value $s 
    $infoObject | Add-Member -MemberType NoteProperty -Name "ServerAvailability" -Value $ConStatus 

    $i=0 

    foreach ($key in $HashSrvs.GetEnumerator()) { 
     $infoObject | Add-Member -MemberType NoteProperty -Name "ServiceName[$i]" -Value $key.Key -Force 
     $infoObject | Add-Member -MemberType NoteProperty -Name "ServiceStatus[$i]" -Value $key.Value -Force 
     $i++ 
    } 
    $infoColl += $infoObject 
} 
$infoColl | Export-Csv -NoTypeInformation -Path .\Server_Inventory_$((Get-Date).ToString('MM-dd-yyyy')).csv -Encoding UTF8

출력은 정확하다. 표시되는 오류가 없습니다. 이 오류는 CSV 파일에서 발생합니다. 강조 표시된 foreach 루프는 반복되지 않습니다. Service Name[0]Service Status[0]에서 멈 춥니 다. 이걸 도와주세요.

+3

편집 질문 출력 및 2) 예상 출력 예입니다. –

답변

0

어떻게 Export-Csv이 작동하는지 오해하고 있습니다. cmdlet은 개체 목록을 입력으로 사용하고 해당 목록의 첫 번째 개체에서 CSV에 대한 열을 결정합니다. 이후의 모든 오브젝트에 대해 누락 된 특성은 널값으로 채워지고 추가 특성은 생략됩니다.

결과를 얻으려면 최대 서비스 수를 알아야하며 각 서비스에 해당 속성 수를 추가해야합니다. 또는 쉼표로 구분 된 문자열 목록을 작성하고 Set-Content 또는 Out-File을 통해 CSV를 수동으로 작성할 수 있습니다. 둘은 물론, 가능 하죠,하지만 훨씬 간단하고 훨씬 더 간단한 방법은 다른 구분자로 하나의 컬럼으로 서비스의 목록을 넣어 것입니다 :) 당신의 잘못의 예를 하나를 포함하는

$infoColl = foreach ($s in $servers) { 
    $svc = Get-Service -Name $services -Computer $s -ErrorAction SilentlyContinue | 
      ForEach-Object { '{0}={1}' -f ($_.Name, $_.Status) } 

    New-Object PSObject -Property @{ 
     'Server name'  = $s 
     'ServerAvailability' = $ConStatus 
     'Services'   = $svc -join '|' 
    } 
} 
관련 문제