Для начала вам нужно будет собирать результаты, а не просто выводить их на экран, так как они возвращаются, как и вы сейчас.Я вернусь к этому через секунду, хотя.Сначала давайте кратко рассмотрим Get-Service
.Если вы запустите Get-Help Get-Service
, вы увидите набор параметров с синтаксисом:
Get-Service [[-Name] <String[]>] [-ComputerName <String[]>] [-DependentServices] [-Exclude <String[]>] [-Include <String[]>] [-RequiredServices] [<CommonParameters>]
Теперь, что мне говорит о том, что параметр -Name
принимает массив строк (как указано <String[]>
, поскольку, если он принимает только одну строку, он будет указан как <String>
).Он также принимает массив строк для параметра -ComputerName
.Это означает, что мы можем запустить команду один раз для каждой категории, то есть всего 3 раза, что должно ускорить процесс.В прошлом мы могли выводить результаты в фрагменты HTML, а затем объединять эти фрагменты в одну страницу HTML, которую мы можем выводить в файл и открывать в веб-браузере.
Итак, сначала мы получаем данные с серверов:
$server = Import-Csv "\path\server.txt"
$CService = @('service1*','service2')
$APPList = @('Service3','Service4*')
$DBList = @('service5','service6')
$CServiceResults = Get-Service $CService -ComputerName $server.sname
$APPListResults = Get-Service $APPList -ComputerName $server.sname
$DBListResults = Get-Service $DBList -ComputerName $server.sname
Теперь, когда у нас есть данные, мы можем создать фрагменты HTML для каждой таблицы, включая заголовок для каждой.Мы должны преобразовать выходные данные в строку, чтобы потом можно было объединить их все:
$CServiceFrag = $CServiceResults | ConvertTo-Html -Property MachineName,ServiceName,Status -As Table -Pre "<H2>Common Services</H2>" -Fragment | Out-String
$APPListFrag = $APPListResults | ConvertTo-Html -Property MachineName,ServiceName,Status -As Table -Pre "<H2>App Services</H2>" -Fragment | Out-String
$DBListFrag = $DBListResults | ConvertTo-Html -Property MachineName,ServiceName,Status -As Table -Pre "<H2>DB Services</H2>" -Fragment | Out-String
Мы должны добавить небольшое форматирование, чтобы таблицы выглядели хорошо, чтобы отчет не был полной глазурью.
$Header = @"
<style>
H1, H2 {
font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
}
table {
font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
border-collapse: collapse;
width: 100%;
}
table, td, th {
border: 1px solid #ddd;
padding: 8px;
}
table tr:nth-child(even){background-color: #f2f2f2;}
table tr:hover {background-color: #ddd;}
table th {
padding-top: 12px;
padding-bottom: 12px;
text-align: left;
background-color: #3366FF;
color: white;
}
</style>
"@
Затем мы складываем все это вместе с ConvertTo-HTML
и выводим его в файл.Получив файл, мы просто используем Invoke-Item
, чтобы открыть его в браузере по умолчанию.
ConvertTo-Html -Head $Header -Pre "<H1>Service Status Report</H1>" -PostContent $CServiceFrag,$APPListFrag,$DBListFrag|Set-Content C:\Temp\Services.htm
Invoke-Item C:\temp\Services.htm
Пример вывода:
Обратите внимание, что мой HTMLнавыки - мусор, так что информация о стиле была почти полностью сорвана с https://www.w3schools.com/css/css_table.asp, с небольшими угадываниями и модификациями, которые я выбрал для удовлетворения потребностей.
Редактировать: Я могу 'Я не могу помочь с настройкой цветов, но я могу помочь с сортировкой, если вы не возражаете против этого, прежде чем выводить на веб-страницу.Для этого вы должны изменить строки, которые создают ваши фрагменты HTML.Например, если вы хотите отсортировать общие службы по имени сервера, вы можете сделать:
$CServiceFrag = $CServiceResults | Sort MachineName | ConvertTo-Html -Property MachineName,ServiceName,Status -As Table -Pre "<H2>Common Services</H2>" -Fragment | Out-String
Если вы хотите отсортировать их по имени службы, вы измените Sort MachineName
на Sort ServiceName
.