首页 > 解决方案 > powershell 脚本丢失格式 HTML

问题描述

我是脚本新手。我有两个问题。

我创建了一个 .ps1 以使设备低于 10% 的可用空间:

Get-Content "C:\temp\servers.txt" | Sort | ForEach {

$computer = $_

$disks = @(Get-WmiObject Win32_LogicalDisk -ComputerName $computer -Filter 'DriveType = 3') | Where-Object {($_.freespace/$_.size) -le '0.1' -and $_.DeviceID -ne 'C:','F:','E:'}


foreach ($disk in $disks) {

    $props = @{
        Server = $computer
        Drive = $disk.Caption
        AmpliarGB = [System.Math]::Round(($disk.Size / 1GB) * (10 /100) - ($disk.FreeSpace / 1GB) +40)
    }

    New-Object PsObject -Property $props

}

} | Select Server,Drive,AmpliarGB | ConvertTo-Html -Head $Header | Out-File "C:\temp\Ampliar.html"

$Header = @"
<style>
TABLE {border-width: 1px; border-style: solid; border-color: black; border-collapse: collapse;}
TD {border-width: 1px; padding: 3px; border-style: solid; border-color: black;}
</style>
"@

第一个问题:

第二个问题:

任何建议将不胜感激。

谢谢你

标签: htmlpowershell

解决方案


对您的代码进行快速而肮脏的修复是

  • 将标题定义放在调用上方ConvertTo-Html
  • 更改排除部分 `-notmatch 'C|E|F'

但是,我建议您做几件事来改进您的代码。

首先,CIM cmdlet 替换了已弃用的 WMI cmdlet。

其次,与其拉出所有驱动器,包括您不想要的驱动器并对其执行昂贵的计算,我们应该首先将它们过滤掉。

三、[PSCustomObject]类型加速器比New-Object方法快

Get-Content "C:\temp\servers.txt" | Sort | ForEach {

    $disks = Get-CimInstance -ClassName -ComputerName $_ Win32_LogicalDisk -Filter "DriveType = 3 and DeviceID != 'C:' and DeviceID != 'E:' and DeviceID != 'F:'"

    foreach ($disk in $disks) {

        [PSCustomObject]@{
            Server = $_
            Drive = $disk.Caption
            AmpliarGB = [System.Math]::Round(($disk.Size / 1GB) * (10 /100) - ($disk.FreeSpace / 1GB) +40)
        }
    }
}

推荐阅读