Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] как раскрасить html?

Ответить
Настройки темы
PowerShell - [решено] как раскрасить html?

Аватара для Ingolder

Старожил


Сообщения: 318
Благодарности: 9

Профиль | Отправить PM | Цитировать


Изменения
Автор: Ingolder
Дата: 07-11-2009
День добрый.
читаю методичку (хз откуда взятую) "Windows PowerShell Введение в технологии языка сценариев для пользователей без базовых знаний". (кому если надо - прикрепил)

Так вот, там есть пример они берут список служб и на его основе создают файл html и раскрашивают его в зависимости от состояния службы:

Get-Service | ConvertTo-Html -Property name,status | Foreach {
If ($_ -Like "*<td>Running</td>*") {$_ -Replace "<tr>", "<tr
bgcolor=green>"}
else {$_ -Replace "<tr>", "<tr bgcolor=red>"}} > .\get-service.html


Всё прекрасно работает, только отсюда возникает два вопроса.

1) почему неправильно работает, если мы уберём условие ELSE ? т.е. так:
Get-Service | ConvertTo-Html -Property name,status | Foreach {
If ($_ -Like "*<td>Running</td>*") {$_ -Replace "<tr>", "<tr
bgcolor=green>"}
} > .\get-service.html

Казалось бы, должен он раскрашивать только те, которые включены, а которые не включены - не раскрашивать. почему так не работает и как этого добиться?
неужели без else здесь нельзя - придётся раскрашивать в стандартные цвета, чтоле?



2) как раскрасить список процессов таком образом, чтобы наиболее активные процессы отличались от менее активных? попытался сделать по аналогии, у меня не получается:

Get-Process|sort cpu -Des|convertto-html name, cpu | % {if ($_.cpu -gt 30){$_ -replace "<tr>", "<tr bgcolor=red>"}else{$_ -replace "<tr>",
"<tr bgcolor=green>"}}| out-file 1.html

всё зелёное выдаёт.
p.s. хочется здесь сделать по принципу "больше, чем", нежели по принципу "первые столько-то".


а вот и третий вопрос назрел:
3) как раскрасить ячейки в одной строке разным цветом?
(интересует повершельная сторона вопроса а не хтмл-ная)

Отправлено: 15:08, 07-11-2009

 

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


1. без Else нельзя, т.к. в этом случае альтернативные варианты будут удаляться из потока... если их не нужно красить, можно сделать пустую замену или просто продублировать объект (строку)
Код: Выделить весь код
Get-Service | ConvertTo-Html -Property name,status | Foreach {`
If ($_ -Like "*<td>Running</td>*") {$_ -Replace "<tr>", "<tr bgcolor=green>"}`
Else {$_}} > .\get-service1.html
2. ИМХО так сравнить не получится, т.к. на выходе имеем текстовые строки:
Код: Выделить весь код
Get-Process | ConvertTo-Html Name,CPU | ForEach {`
[regex]::replace($_, "<tr>(?=<td>[^<]*</td><td>([3-9]\d,|\d{3}))","<tr bgcolor=red>")`
} >.\get-service2.html
3. аналогично п.2... про "повершельную сторону" не понял...
Код: Выделить весь код
Get-Process | ConvertTo-Html Name,CPU | ForEach {`
[regex]::replace($_, "<td>(?=[^<]*</td></tr>)", "<td bgcolor=green>")`
} >.\get-service3.html
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:07, 07-11-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Ingolder

Старожил


Сообщения: 318
Благодарности: 9

Профиль | Отправить PM | Цитировать


спасибо за ответ на первый вопрос!

коды под пунктами 2 и 3 выдают всё белое, ничего не раскрашивается..
и поясните их пожалуйста, мне во вторых строчках непонятно ничего.


про повершгельную сторону имел ввиду что я хтмл понимаю, неепонимаю именно как в повершелле правильно написать

Отправлено: 14:07, 11-11-2009 | #3


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата Ingolder:
коды под пунктами 2 и 3 выдают всё белое, ничего не раскрашивается..
и поясните их пожалуйста »
Собственно, 2 и 3 работают так же как 1: в итоговом HTML-файле производится построчная обработка текста - замена простых тегов на теги с заполненным атрибутом цета... только вместо простой замены подстроки (метод -Replace) используется замена на базе регулярных выражений. Чтобы было понятней, разделил опрерации формирования HTML (шаг 0.) и его последующего форматирования.

0. Формируем базовый HTML-документ (get-service0.html).
Код: Выделить весь код
Get-Process | ConvertTo-Html Name,CPU >.\get-service0.html
1. Подсвечиваем красным CPU >=30 (get-service2.html).
Код: Выделить весь код
Get-Content .\get-service0.html | ForEach {`
[regex]::replace($_,"<tr>(?=<td>[^<]*</td><td>([3-9]\d[.,]|\d{3}))","<tr bgcolor=red>")`
} >.\get-service2.html
2. Подсвечиваем зеленым весь второй столбец (get-service3.html).
Код: Выделить весь код
Get-Content .\get-service0.html | ForEach {`
[regex]::replace($_,"<td>(?=[^<]*</td></tr>)","<td bgcolor=green>")`
} >.\get-service3.html
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:51, 12-11-2009 | #4


Аватара для Xaegr

Сотрудник Microsoft


Сообщения: 56
Благодарности: 24

Профиль | Сайт | Отправить PM | Цитировать


"Методичка" взята тут, рядом лежит продолжение.

Что касается вопросов... В данном случае IMHO проще и понятнее сформировать HTML самому, например так:
Код: Выделить весь код
$Processes = Get-Process 
$Max = ($Processes | sort cpu)[-1].cpu
$Mult = 255 / $max
$HtmlItems = ""
foreach ($P in $Processes)
{
    $HtmlItems += ('<tr><td>{0}</td><td bgcolor="#FF{1:x2}{1:x2}">{2}</td></tr>' -f $P.Name, (255-([int]($P.CPU * $Mult))), $P.CPU)
}
$template = @"
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>HTML TABLE</title>
</head><body>
<table>
<colgroup>
<col/>
<col/>
</colgroup>
<tr><th>Name</th><th>CPU</th></tr>
$HtmlItems
</table>
</body></html>
"@
$template | set-content out.html
Этот скрипт подсветит колонку CPU. Яркость вычисляется относительно самого занятого процесса.
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:24, 15-11-2009 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] как раскрасить html?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интерфейс - [решено] Как в WINXP HTML-ку перивесить нарабочий стол ??? антигерой Microsoft Windows 2000/XP 3 13-12-2009 14:55
[решено] Как сделать так, чтоб при переходе на example.com в него загружался не index.html? maasja Вебмастеру 2 07-11-2009 18:43
Как сделать обработку $_GET и сборку html-документа екзешником, как multitran.ru? borg92 Вебмастеру 1 13-08-2009 10:23
как сделать градиент в html? rizz Вебмастеру 11 28-01-2007 21:10
Как включить html? Sherla О сайте и форуме 1 27-06-2003 11:49




 
Переход