定義されたリストから、サーバーのディスク容量をチェックするスクリプトがあります。
最初の disk.ps1 と list.txt ファイルは常に "D:\scripts\disk.ps1" にあり、スクリプトを実行したユーザーのデスクトップに "結果" html ファイルを送信したいと考えています。
私は次の行を使用していますが、OKかどうかはわかりませんが、多くのテストを行いましたが、結果は常にpowershellのエラーです。
$Path = "C:\Users\%userprofile%\Desktop\Disk-Report.html"
これが私のスクリプトです:
# Simple HTML page displaying disk usage.
Param (
$computers = (Get-Content "D:\Scripts\list.txt")
)
$Title="Hard Drive Report to HTML"
#embed a stylesheet in the html header
$head = @'
<style>
body { background-color:#dddddd;
font-family:Tahoma;
font-size:12pt; }
td, th { border:1px solid black;
border-collapse:collapse; }
th { color:white;
background-color:black; }
table, tr, td, th { padding: 2px; margin: 0px }
table { margin-left:50px; }
</style>
'@
#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
$Path = "C:\Users\%userprofile%\Desktop\Disk-Report.html"
#write the result to a file
ConvertTo-Html -head $head -body $fragments | Out-File -filepath $Path