如何用PowerShell创建HTML条形图?

日期: 2012-02-20 作者:徐艳 来源:TechTarget中国

很多时候我们可以使用已有的工具实现很多实用的功能,只是我们并没有想到这个点上而已。这几天我一直在研究如何将PowerShell控制台当作图形工具使用。当然,有人马上就会想知道如何将它应用到HTML上。这里我就给出一个在HTML页面中创建彩色条形图的脚本demo。

  下面是demo代码: #requires -version 2.0 Param ([string[]]$computers=@($env:computername),[string]$Path=”drivereport.htm”) $Title=”Drive Report” #emb……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

很多时候我们可以使用已有的工具实现很多实用的功能,只是我们并没有想到这个点上而已。这几天我一直在研究如何将PowerShell控制台当作图形工具使用。当然,有人马上就会想知道如何将它应用到HTML上。这里我就给出一个在HTML页面中创建彩色条形图的脚本demo。

  下面是demo代码:

#requires -version 2.0

Param (
[string[]]$computers=@($env:computername),
[string]$Path="drivereport.htm"
)

$Title="Drive Report"

#embed a stylesheet in the html header
$head = @"
<style>
body { background-color:#FFFFCC;
       font-family:Tahoma;
       font-size:12pt; }
td, th { border:1px solid #000033;
         border-collapse:collapse; }
th { color:white;
     background-color:#000033; }
table, tr, td, th { padding: 0px; margin: 0px }
table { margin-left:10px; }
</style>
<Title>$Title</Title>
<br>
"@

#define an array for html fragments
$fragments=@()

#get the drive data
$data=get-wmiobject -Class Win32_logicaldisk -filter "drivetype=3" -computer $computers

#group data by computername
$groups=$Data | Group-Object -Property SystemName

#this is the graph character
[string]$g=[char]9608

#create html fragments for each computer
#iterate through each group object
       
ForEach ($computer in $groups) {
   
    $fragments+="<H2>$($computer.Name)</H2>"
   
    #define a collection of drives from the group object
    $Drives=$computer.group
   
    #create an html fragment
    $html=$drives | Select @{Name="Drive";Expression={$_.DeviceID}},
    @{Name="SizeGB";Expression={$_.Size/1GB  -as [int]}},
    @{Name="UsedGB";Expression={"{0:N2}" -f (($_.Size - $_.Freespace)/1GB) }},
    @{Name="FreeGB";Expression={"{0:N2}" -f ($_.FreeSpace/1GB) }},
    @{Name="Usage";Expression={
      $UsedPer= (($_.Size - $_.Freespace)/$_.Size)*100
      $UsedGraph=$g * ($UsedPer/2)
      $FreeGraph=$g* ((100-$UsedPer)/2)
      #I'm using place holders for the < and > characters
      "xopenFont color=Redxclose{0}xopen/FontxclosexopenFont Color=Greenxclose{1}xopen/fontxclose" -f

$usedGraph,$FreeGraph
    }} | ConvertTo-Html -Fragment
   
    #replace the tag place holders. It is a hack but it works.
    $html=$html -replace "xopen","<"
    $html=$html -replace "xclose",">"
   
    #add to fragments
    $Fragments+=$html
   
    #insert a return between each computer
    $fragments+="<br>"
   
} #foreach computer

#add a footer
$footer=("<br><I>Report run {0} by {1}{2}<I>" -f (Get-Date -displayhint date),$env:userdomain,$env:username)
$fragments+=$footer

#write the result to a file
ConvertTo-Html -head $head -body $fragments  | Out-File $Path

  这里的关键点是我是从一个HTML片断的集合中创建了最终的HTML文件。我认为这个脚本中的大部分都应该是自解释的。这个脚本的核心部分为计算机收集驱动器,选择定制的属性并将其改变成HTML片断。

  讲技巧的部分是Expression scriptblock中“使用”的数值,我计算了要使用的磁盘空间的数值及其中免费空间的数值。然后我创建了一行代码,它是我的图形字符([CHAR]9608)乘以一个数值。这个数值是相应比例除以2,因为我想把用过的图形放在免费图形的右边。我希望用过的图形是红色的,免费的行则是绿色的。我采用快捷方式并使用字体标签。但是我不可以使用< and >字符,因为Convertto-HTML会翻译它们,所以我选用一个占位符来代替。

 "xopenFont color=Redxclose{0}xopen/FontxclosexopenFont Color=Greenxclose{1}xopen/fontxclose" -f $usedGraph,

$FreeGraph

  我需要做的就是从HTML输出中替换占位符。

 #replace the tag place holders. It is a hack but it works.
    $html=$html -replace "xopen","<"
    $html=$html -replace "xclose",">"
   
    #add to fragments
    $Fragments+=$html

  这也许不是最好的解决方法,但是它绝对有效。这个脚本包括所有HTML代码并创建最终文件。

ConvertTo-Html -head $head -body $fragments  | Out-File $Path

  如果要将它应用到一组计算机上,我可以运行如下命令:

PS C:scripts> .demo-HtmlBarChart.ps1 "jdhit-dc01","serenity","quark"

  以下是结果所示:

HTml PowerShell

  这只是一个demo脚本,因此还有很多不足。也许这可以给大家一个方向,找到更好更完善的方式。如果你已经有了好的想法,不妨和我们来分享一下你的PowerShell心得。

作者

徐艳
徐艳

相关推荐