2014-01-08 3 views
0

나는 Hyper-V VM을 매일 검사하고 HTML 형식으로 필요한 출력을 얻습니다. 그러나 html 서식 지정에는 항상 개선의 여지가 있으므로 다음 문제에 대한 도움이 필요합니다.Powershell : html 서식 내에서 powershell 명령 사용

나는 다음과 같은 배열

$outputArray = @() 
foreach($VM in $VMS) { 
     $VMsRAM = [math]::round($VM.Memoryassigned/1GB) 
     $VMsCPU = $VM.processorCount 
     $VMsState = $VM.State 
     $VMsStatus = $VM.Status 
     $VMsUptime = $VM.Uptime 
     $VMsAutomaticstartaction = $VM.Automaticstartaction 
     $VMsIntegrationServicesVersion = $VM.IntegrationServicesVersion 
     $VMsReplicationState = $VM.ReplicationState 
     $VHDsGB = @{ label="File_Size"; Expression={[math]::round($_.FileSize/1GB)}} 
     $VHDs = Get-VHD -ComputerName $VM.ComputerName -VMId $VM.Id | Select Path, VHDType, VHDFormat, $VHDsGB 

     $output = new-object psobject 
     $output | add-member noteproperty "VM Name" $VM.Name 
     $output | add-member noteproperty "RAM(GB)" $VMsRAM 
     $output | add-member noteproperty "vCPU" $VMsCPU 
     $output | add-member noteproperty "State" $VMsState 
     $output | add-member noteproperty "Status" $VMsStatus 
     $output | add-member noteproperty "Uptime" $VMsUptime 
     $output | add-member noteproperty "Start Action" $VMsAutomaticstartaction 
     $output | add-member noteproperty "Integration Tools" $VMsIntegrationServicesVersion 
     $output | add-member noteproperty "Replication State" $VMsReplicationState 
     $output | add-member noteproperty "VHD Path" $VHDs.Path 
     $output | add-member noteproperty "Size GB" $VHDs.File_Size 
     $output | add-member noteproperty "VHD Type" $VHDs.vhdtype 
     $output | add-member noteproperty "VHD Format" $VHDs.vhdformat 
     $outputArray += $output 
} 

다음을 가지고, 나는

#Export contents to htm 
if($outputArray -ne $null) { 
    $HTML5 = '<style type="text/css"> 
    #Header{font-family:"Trebuchet MS", Arial, Helvetica, sans-serif;width:100%;border-collapse:collapse;} 
    #Header td, #Header th {font-size:14px;border:1px solid #98bf21;padding:3px 7px 2px 7px;} 
    #Header th {font-size:14px;text-align:left;padding-top:5px;padding-bottom:4px;background-color:#A7C942;color:#fff;} 
    #Header tr.alt td {color:#000;background-color:#EAF2D3;} 
    </Style>' 
    $HTML5 += "<font face=verdana size=4 color=#23B108><b><CENTER>VMGuest Tech Spec's</CENTER></b></font>" 
    $HTML5 += "<HTML><BODY><Table border=1 cellpadding=0 cellspacing=0 width=100% id=Header> 
     <TR> 
      <TH><B>VM Name</B></TH> 
      <TH><B>RAM(GB)</B></TD> 
      <TH><B>vCPU</B></TD> 
      <TH><B>State</B></TD> 
      <TH><B>Uptime</B></TD> 
      <TH><B>Integration Tools</B></TD> 
      <TH><B>Replication State</B></TD> 
      <TH><B>VHD Path</B></TD> 
      <TH><B>Size GB</B></TD> 
      <TH><B>VHD Type</B></TD> 
      <TH><B>VHD Format</B></TD> 
     </TR>" 

Foreach($Entry in $outputArray){ 
    $HTML5 += "<TR> 
      <TD>$($Entry.'VM Name')</TD> 
      <TD>$($Entry.'RAM(GB)')</TD> 
      <TD>$($Entry.vCPU)</TD> 
      <TD>$($Entry.State)</TD> 
      <TD>$($Entry.Uptime)</TD> 
      <TD>$($Entry.'Integration Tools')</TD> 
      <TD>$($Entry.'Replication State')</TD> 
      <TD>$($Entry.'VHD Path')<BR></TD> 
      <TD>$($Entry.'Size GB')</TD> 
      <TD>$($Entry.'VHD Type')</TD> 
      <TD>$($Entry.'VHD Format')</TD> 

     </TR>" 

} 

위의 코드는 잘 작동 HTML 형식을 사용하여 출력을 던져. 그러나 "$ ($ Entry.'VHD Path ')
"이라는 결과는 다중 가상 디스크의 &이 혼란 스럽기 때문에 여러 경로로 나타납니다. 이제, 제 질문은 각 출력을 테이블 내부의 별도의 줄에 어떻게 포맷합니까?

미리 도움을 주셔서 감사합니다.

+0

내가'$ Entry.'VHD Path''가 배열임을 제대로 이해하고 있는가 사용해야합니다? (또는 단지 쉼표로 구분 된 문자열 ...?) – marsze

+0

예, 배열의 일부입니다 ... 배열 내에서 가져 오는 각 값에 대한 레이블을 제공합니다. 다음은 다른 정보가있는 모든 경로 정보를 수집합니다. $ VHDs = Get-VHD -ComputerName $ VM.ComputerName -VMId $ VM.Id | 경로, VHD 유형, VHD 형식, $ VHDsGB 경로 요소 $ VHDs.Path에만 이제 레이블 $ output | 추가 회원 noteproperty "VHD 경로"$ VHDs.Path 마지막으로 레이블 이름을 $ ($ Entry.'VHD 경로 ') 마법처럼
user539454

답변

1

$ OFS 변수 (http://technet.microsoft.com/en-us/library/hh847796.aspx)를 사용할 수 있습니다. 배열이 문자열로 변환 될 때 배열의 요소를 구분하는 문자를 지정합니다. 예를 들어

: 개행 문자 대신 공백

의해 분리
$OFS = "`n" 
$array = Get-ChildItem $env:USERPROFILE 
Write-Host "$array" 

이 출력 할 어레이 소자. 귀하의 경우에는

당신은 $OFS = "<br />"

+0

Perfect..Works를 사용하여 HTML 형식의 출력 메신저입니다. 감사합니다. Levgen :) – user539454