HTML 웹 페이지에서 powershell 스크립트에서만 서버 이름 및 ping 결과를 표시하는 방법

Nov 13 2020

"ConvertTo-Html"속성을 사용하여 HTML 웹 페이지로 표시되는 서버가 온라인 상태인지 확인하는 스크립트를 만들려고합니다. 또한 작은 CSS도 적용했습니다.

내 코드는 다음과 같습니다.

$Header = @" <style> table { font-family: "Trebuchet MS", Arial, Helvetica, sans-serif; border-collapse: collapse; width: 100%; } th { padding-top: 12px; padding-bottom: 12px; text-align: left; background-color: green; color: white; } </style> "@ $OS = Test-Connection -ComputerName Server1, Server2, Server3 | ConvertTo-Html
ConvertTo-Html -Body "$OS" -Title "Fragment" -Head $Header | Out-File StatusReport.html

" StatusReport.html " 파일의 출력 결과에 불필요한 정보가 너무 많이 표시됩니다 (사진 첨부). 서버 이름, 핑 결과 중 몇 개만 표시하려면 어떻게해야합니까?

답변

2 DougMaurer Nov 14 2020 at 00:59

Ass Lee는 출력에서 ​​원하는 속성을 선택해야한다고 언급했습니다. 꽤 많은 속성이 있지만 그들 중 어느 것도 Server또는 result.

속성 목록을 보려면 출력을 Get-Member

Test-Connection google.com -count 1 | Get-Member

Format-List *속성 및 값을 보는 데 사용할 수도 있습니다.

Test-Connection google.com -count 1 | Format-List *

속성을 알고 나면 이름으로 선택할 수 있습니다.

Test-Connection google.com -count 1 | Select-Object Address,IPv4Address,StatusCode

속성의 이름을 바꾸려면 계산 된 속성을 사용할 수 있습니다.

Test-Connection google.com -count 1 |
    Select-Object @{n='Server';e={$_.Address}},IPv4Address,@{n='Result';e={'Successful'}}

그러나 이것은 실패한 핑 결과를 고려하지 않습니다. 다음은 성공과 실패를 모은 다음 두 가지를 결합하는 코드입니다. 속성 이름이 일치해야합니다.

$targets = 'server1', 'server2', 'server3', 'dontexist'

$success = Test-Connection -ComputerName $targets -Count 1 -ErrorAction SilentlyContinue -ErrorVariable errors |
               Select-Object @{n='Server';e={$_.address}},IPv4Address,@{n='Result';e={'Successful'}} $failed = $errors.exception.message | Where-Object {$_ -match "computer '(.+?)'"} |
                  Select-Object @{n='Server';e={$matches.1}}, @{n='IPv4Address';e={"N/A"}}, @{n='Result';e={'Failed'}} $success + $failed

스플래 팅 을 사용하여 코드를 더 쉽게 읽고 유지 관리 할 수 있습니다 .

$params = @{
    ComputerName  = 'server1', 'server2', 'server3', 'dontexist'
    Count         =  1
    ErrorAction   = 'SilentlyContinue'
    ErrorVariable = 'errors'
}

$success = Test-Connection @params | Select-Object @{n='Server';e={$_.address}},
                             IPv4Address,
                             @{n='Result';e={'Successful'}}

$failed = $errors.exception.message |
              Where-Object {$_ -match "computer '(.+?)'"} | Select-Object @{n='Server';e={$matches.1}},
                                @{n='IPv4Address';e={"N/A"}},
                                @{n='Result';e={'Failed'}}

$success + $failed

이것을 약간 수정 된 코드 버전과 결합하면 최종 스크립트가됩니다.

$Header = @" <style> table { font-family: "Trebuchet MS", Arial, Helvetica, sans-serif; border-collapse: collapse; width: 100%; } th { padding-top: 12px; padding-bottom: 12px; text-align: left; background-color: green; color: white; } </style> "@ $params = @{
    ComputerName  = 'server1', 'server2', 'server3', 'dontexist'
    Count         =  1
    ErrorAction   = 'SilentlyContinue'
    ErrorVariable = 'errors'
}

$success = Test-Connection @params | Select-Object @{n='Server';e={$_.address}},
                             IPv4Address,
                             @{n='Result';e={'Successful'}}

$failed = $errors.exception.message |
              Where-Object {$_ -match "computer '(.+?)'"} | Select-Object @{n='Server';e={$matches.1}},
                                @{n='IPv4Address';e={"N/A"}},
                                @{n='Result';e={'Failed'}}

$success + $failed |
    ConvertTo-Html -Title "Fragment" -Head $Header |
        Set-Content -Path StatusReport.html -Encoding UTF8