返回

如何在 PowerShell 中导出 Excel 数据,显示小数并突出显示异常值?

windows

## 使用 PowerShell Export-Excel 导出 Excel 数据,显示小数和突出显示异常值

摘要

在本教程中,我们将学习如何使用 PowerShell 导出包含小数的 Excel 数据,并对超过某个阈值的特定值进行条件格式化,以突出显示异常值。我们将使用 Export-Excel cmdlet 的 -Style 参数和自定义样式来实现这一目标。

问题:导出缺少小数和突出显示

当你使用 PowerShell 脚本将数据导出到 Excel 时,你可能会遇到以下问题:

  • 缺少小数: 导出的 Excel 文件中没有小数位,这可能会导致数据丢失或舍入错误。
  • 无法突出显示异常值: 你希望根据某个阈值(例如超过 80%)突出显示异常值,但导出的文件中没有这样的格式化。

解决问题的方法

要解决这些问题,我们需要对 PowerShell 脚本进行一些修改:

1. 格式化数字以显示小数位

我们可以使用 [math]::Round() 函数将数字舍入到指定的小数位数。例如,以下代码将内存使用率舍入到小数点后两位:

$RoundMemory = [math]::Round($Memory, 2)

2. 高亮显示超过阈值的异常值

我们可以使用 Export-Excel cmdlet 的 -Style 参数来设置条件样式。如果值超过某个阈值,它将使用特定的格式(例如红色背景)进行突出显示。例如,以下代码突出显示内存使用率超过 80% 的值:

$array | Export-Excel -Path C:\users\4749\Informe.xlsx -Style @{StyleName="RedHighlight"; If="$Memory > 80" {$Interior="Red"}}

3. 创建自定义条件样式

我们可以使用 -StyleName 参数创建自定义条件样式。例如,以下代码创建一个名为 "RedHighlight" 的自定义样式,该样式使用红色背景突出显示值:

$Style = New-Object -TypeName Microsoft.Office.Interop.Excel.Style
$Style.Interior.Color = "Red"
$Style.Name = "RedHighlight"

修改后的脚本

通过结合上述修改,我们得到以下修改后的 PowerShell 脚本:

$Servers = Get-Content "$env:USERPROFILE\Desktop\serversTest.txt"
$Array = @()
 
ForEach ($Server in $Servers) {
    $Check = $Processor = $ComputerMemory = $RoundMemory = $Object = $null
    $Server = $Server.trim()
 
    Try {
        # Processor utilization
        $Processor = (Get-WmiObject -ComputerName $Server -Class win32_processor -ErrorAction Stop | Measure-Object -Property LoadPercentage -Average | Select-Object Average).Average
 
        # Memory utilization
        $ComputerMemory = Get-WmiObject -ComputerName $Server -Class win32_operatingsystem -ErrorAction Stop
        $Memory = ((($ComputerMemory.TotalVisibleMemorySize - $ComputerMemory.FreePhysicalMemory)*100)/ $ComputerMemory.TotalVisibleMemorySize)
        $RoundMemory = [math]::Round($Memory, 2)
         
        # Creating custom object
        $Object = New-Object PSCustomObject
        $Object | Add-Member -MemberType NoteProperty -Name "Server name" -Value $Server
        $Object | Add-Member -MemberType NoteProperty -Name "CPU %" -Value $Processor
        $Object | Add-Member -MemberType NoteProperty -Name "Memory %" -Value $RoundMemory
 
        $Object
        $Array += $Object
    }
    Catch {
        Write-Host "No se encuentra el servidor ($Server): "$_.Exception.Message
        Continue
    }
}
 
#Final results
If ($Array) { 
    $Style = New-Object -TypeName Microsoft.Office.Interop.Excel.Style
    $Style.Interior.Color = "Red"
    $Style.Name = "RedHighlight"
   
    $array | Export-Excel -Path C:\users\4749\Informe.xlsx -Style @{StyleName="RedHighlight"; If="$Memory > 80" {$Interior="Red"}}
}

结论

通过对 PowerShell 脚本进行这些修改,我们现在可以将包含小数的 Excel 数据导出到 Excel 文件中,并突出显示超过指定阈值的异常值。这种方法对于从服务器收集数据并以易于可视化和理解的方式呈现数据非常有用。

常见问题解答

  1. 如何更改突出显示异常值的阈值?
    你可以修改 -Style 参数中条件语句中的阈值,例如 If="$Memory > 70" 将突出显示超过 70% 的内存使用率。

  2. 如何创建多个条件样式?
    你可以创建多个条件样式并将其指定给不同的值范围。例如,你可以创建一个样式突出显示低于 50% 的值,另一个样式突出显示高于 90% 的值。

  3. 如何将数据导出到现有的 Excel 文件?
    你可以使用 -Append 参数将数据附加到现有的 Excel 文件中。例如:

    $array | Export-Excel -Path C:\users\4749\Informe.xlsx -Append
    
  4. 我可以突出显示不同的值范围吗?
    是的,你可以使用 -ConditionalFormatting 参数为不同的值范围创建多个条件。例如:

    $array | Export-Excel -Path C:\users\4749\Informe.xlsx -ConditionalFormatting @{
        @{ Condition = {"$Memory -gt 80"}; StyleName = "RedHighlight" }
        @{ Condition = {"$Memory -gt 90"}; StyleName = "OrangeHighlight" }
    }
    
  5. 如何将数据导出到其他文件格式,例如 CSV?
    你可以使用 Export-Csv cmdlet 将数据导出到 CSV 文件。例如:

    $array | Export-Csv -Path C:\users\4749\Informe.csv