You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求修正PowerShell脚本:筛选NSG规则表中无黄/灰/空白单元格的行

修正PowerShell NSG规则表格检查脚本

原脚本存在几个核心问题导致未达到预期效果,以下是问题分析和修正后的脚本:

问题分析

  • 颜色值格式错误:EPPlus的BackgroundColor.Rgb返回纯RGB十六进制值(无Alpha通道前缀FF),原脚本使用ARGB格式颜色码,导致颜色判断失效。
  • 行遍历范围冗余:直接遍历$worksheet.Cells.Rows会包含所有空行,应限制在实际有数据的行范围内。
  • 空白单元格判断逻辑不严谨:仅用-not $cell.Value会漏掉含空白字符的单元格,需用更严格的空白判断。
  • 样式继承未处理:单元格可能继承行/列样式,直接读取单元格自身样式无法获取实际生效的背景色。

修正后的脚本

# Load the EPPlus library
Add-Type -Path "/home/lokesh/EPPlus.dll"  # Replace with your EPPlus.dll path

# Load the Excel file
$filePath = "/home/lokesh/NSG_Rules.xlsx"
$excelPackage = [OfficeOpenXml.ExcelPackage]::Load($filePath)

# Get the first worksheet
$worksheet = $excelPackage.Workbook.Worksheets[0]

# Get valid row range (skip empty rows outside data area)
$startRow = 1
$endRow = $worksheet.Dimension?.Rows ?? 1

# Function to get effective cell background color (handles style inheritance)
function Get-CellBackgroundColor {
    param($cell)
    # Check cell's own style first, then row style, then column style
    $cellColor = $cell.Style.Fill.BackgroundColor.Rgb
    if (-not $cellColor) {
        $cellColor = $cell.Worksheet.Row($cell.Start.Row).Style.Fill.BackgroundColor.Rgb
    }
    if (-not $cellColor) {
        $cellColor = $cell.Worksheet.Column($cell.Start.Column).Style.Fill.BackgroundColor.Rgb
    }
    return $cellColor ?? ""
}

# Skip rows with yellow, gray, or blank/whitespace cells
$rowsToKeep = @()
for ($rowNum = $startRow; $rowNum -le $endRow; $rowNum++) {
    $skipRow = $false
    $row = $worksheet.Cells[$rowNum, 1..$worksheet.Dimension.Columns]
    
    foreach ($cell in $row) {
        $cellColor = Get-CellBackgroundColor $cell
        $isYellow = ($cellColor -eq "FFFF00")  # RGB for yellow
        $isGray = ($cellColor -eq "A9A9A9")    # RGB for gray
        $isBlank = [string]::IsNullOrWhiteSpace($cell.Text)
        
        if ($isYellow -or $isGray -or $isBlank) {
            $skipRow = $true
            break
        }
    }
    
    if (-not $skipRow) {
        $rowsToKeep += $row
    }
}

# Optional: Output or process the kept rows
$rowsToKeep | ForEach-Object {
    $_.Cells.Value -join "`t"
}

# Clean up
$excelPackage.Dispose()

关键修正点说明

  1. 颜色值修正:将黄色改为FFFF00,灰色改为A9A9A9,匹配EPPlus返回的RGB格式。
  2. 有效行范围:通过$worksheet.Dimension.Rows获取实际数据行的结束位置,避免遍历无意义的空行。
  3. 空白判断优化:使用[string]::IsNullOrWhiteSpace($cell.Text)覆盖空白字符、空值、公式返回空等情况。
  4. 样式继承处理:新增Get-CellBackgroundColor函数,优先读取单元格自身样式,再 fallback 到行、列样式,确保获取实际生效的背景色。

内容的提问来源于stack exchange,提问作者Lokesh M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 22:46:13