首页 > 解决方案 > 如何仅从 html 网页中的 powershell 脚本显示服务器名称和 ping 结果

问题描述

我正在尝试创建用于检查服务器是否在线的脚本,该脚本将使用“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 ”文件中的输出结果显示了太多不必要的信息(附照片)。我怎样才能只显示其中的几个:服务器名称,ping 结果?

标签: powershell

解决方案


Ass Lee 评论说,您需要从输出中选择所需的属性。有很多属性,但没有一个是Serveror 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'}}

但是,这并不能说明任何失败的 ping 结果。这里有一些代码将收集成功和失败,然后将两者结合起来。请注意,属性名称需要匹配。

$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

您可以使用splatting使代码更易于阅读和维护。

$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

推荐阅读