很多时候我们可以使用已有的工具实现很多实用的功能,只是我们并没有想到这个点上而已。这几天我一直在研究如何将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中国
很多时候我们可以使用已有的工具实现很多实用的功能,只是我们并没有想到这个点上而已。这几天我一直在研究如何将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"
以下是结果所示:
这只是一个demo脚本,因此还有很多不足。也许这可以给大家一个方向,找到更好更完善的方式。如果你已经有了好的想法,不妨和我们来分享一下你的PowerShell心得。
作者
相关推荐
-
应用PowerShell进行SharePoint Online管理
在应用PowerShell在线管理SharePoint之前,管理员需要进行一系列准备工作,例如下载SharePoint Online Management Shell等。
-
两种方式将Windows容器部署到微软Azure中
想要创建并管理Windows Server容器吗?本文将会介绍如何利用本地Docker命令和PowerShell模块来实现以上目标。
-
PowerShell脚本示例及管理员参考指南
精明的Windows专业人士和管理员甚至也会做出比卷子袖子干事更加愚笨的事情,为了实现自动化任务,他们需要了解脚本语言以及所有PowerShell工具。
-
如何使用PowerShell管理Windows服务
管理员如何在本地或者远程计算机上操控服务,面对变几十台甚至几百台机器时,PowerShell就派上用场了。