0

我有一个脚本,可以从定义的列表中检查我们服务器上的磁盘空间。

初始的 disk.ps1 和 list.txt 文件将始终位于“D:\scripts\disk.ps1”上,我想在运行脚本的用户的桌面上发送“结果”html 文件。

我正在使用以下行,但不确定是否可以,进行了多次测试,但结果始终是 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 
4

1 回答 1

2

尝试

$Path = "$env:userprofile\Desktop\Disk-Report.html"

要在 powershell 中调用环境变量,请使用$env:nameofthevariable.

%nameofthevariable%CMD/DOS.

于 2013-09-11T13:57:23.463 回答