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

如何使用PowerShell检查CSV列空行并处理Exchange Mailboxes数据

故障原因
  • 空行判断逻辑不严谨:原代码用IsNullOrEmpty只能识别完全为空的字段,CSV中空行如果携带不可见的空格、换行符、制表符,会被误判为非空行,后续执行邮箱提取、EXO查询时直接报错。
  • 邮箱提取逻辑无容错:原代码直接取Split后的索引位1的值,如果字段格式存在偏差(比如括号前后多空格、格式不符合预期),会拿到空值或者无效字符串,传入查询命令后触发异常。
  • EXO查询无空值校验:如果查询不到匹配的邮箱,$exoUser会返回空值,直接读取.DisplayName、.Identity属性会触发空引用错误,中断整个循环。
  • 无结果存储逻辑:原代码只是循环内给变量赋值,没有把每行的处理结果留存,循环结束后只能拿到最后一行的处理值,拿不到全量结果。
修正后代码
# 导入目标CSV文件
$importFile = Import-Csv -Path "C:\AuditLogSearch\Dis\Modified-Audit-Log-Records.csv"
$processResult = @()

foreach ($line in $importFile){
    # 覆盖空值、全空白字符的空行场景
    if([string]::IsNullOrWhiteSpace($line.'Exchange Mailboxes')){
        $userName = ""
        $userId = ""
        $parsedMail = ""
    }else{
        # 提取括号内的邮箱地址并清除前后多余空格
        $parsedMail = $line.'Exchange Mailboxes'.Split([char[]]@('[', ']'))[1].Trim()
        # 校验提取内容是否符合邮箱格式,避免无效查询
        if (-not [string]::IsNullOrWhiteSpace($parsedMail) -and $parsedMail -match '^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$') {
            try {
                # 执行EXO邮箱查询,错误触发时进入catch逻辑
                $exoUser = Get-EXOMailbox -Filter "PrimarySmtpAddress -eq '$parsedMail'" -ErrorAction Stop
                if ($null -ne $exoUser) {
                    $userName = $exoUser.DisplayName
                    $userId = $exoUser.Identity
                }
                else {
                    $userName = ""
                    $userId = ""
                }
            }
            catch {
                # 查询异常时兜底赋值空,避免循环中断
                $userName = ""
                $userId = ""
                Write-Warning "邮箱 $parsedMail 查询失败:$($_.Exception.Message)"
            }
        }
        else {
            # 字段格式不符合预期时兜底赋值空
            $userName = ""
            $userId = ""
        }
    }

    # 拼接当前行处理结果存入结果集
    $processResult += [PSCustomObject]@{
        OriginalFieldValue = $line.'Exchange Mailboxes'
        ParsedEmail = $parsedMail
        EXO_DisplayName = $userName
        EXO_Identity = $userId
    }
}

# 如需导出处理结果,取消下方注释修改输出路径即可
# $processResult | Export-Csv -Path "C:\AuditLogSearch\Dis\Processed-Mailbox-Records.csv" -NoTypeInformation -Encoding UTF8
关键调整说明
  • 空行判断改用IsNullOrWhiteSpace,覆盖所有空行、带不可见空白字符的无效行场景。
  • 提取邮箱后增加空格清理、格式校验,从源头拦截无效查询参数。
  • 给EXO查询增加try/catch异常捕获、返回值非空判断,查询失败、无匹配结果时不会中断脚本,自动给变量赋值空字符串。
  • 新增结果集存储逻辑,所有行的处理结果会统一存入数组,支持直接调用或导出为新CSV文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:27:41