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

PowerShell循环导出Exchange邮箱到PST时变量使用问题

Exchange PST导出脚本变量逻辑修正方案

原有代码核心问题

  • 对邮箱数组直接调用Split("@")的写法错误,只会提取第一个邮箱地址的前缀,无法获取所有完整邮箱地址传入导出命令
  • 字符串拼接语法错误,双引号包裹的字符串内直接嵌入变量即可,不需要额外用+连接
  • 循环内没有区分完整邮箱地址和邮箱前缀的使用场景,导致参数和路径生成逻辑混乱

修正后完整代码

# 拉取所有AD用户的非空邮箱地址并写入文件
$Lines = Get-ADUser -Filter * -Properties EmailAddress
$Lines | Where-Object {$_.EmailAddress -ne $null} | Select-Object -ExpandProperty EmailAddress | Out-File "C:\T2\EMailAddresses.txt"

# 清理邮箱地址前后空白、过滤空行
(Get-Content "C:\T2\EMailAddresses.txt") | ForEach-Object { $_.Trim() } | Where-Object {$_ -ne ''} | Set-Content "C:\T2\EMailAddresses.txt"

# 加载Exchange管理插件
Add-PSSnapIn -Name Microsoft.Exchange, Microsoft.Windows.AD

# 定义路径常量
$ExportRootPath = "\\qnap1\archive\exchange_Migration\"
$PrimarySuffix = "_Primary_mailbox.pst"
$ArchiveSuffix = "_Archive_mailbox.pst"

# 遍历邮箱列表执行导出
ForEach ($FullEmail in Get-Content "C:\T2\EMailAddresses.txt") {
    # 仅提取@前的用户名部分用于生成导出文件名
    $UserName = $FullEmail.Split("@")[0]
    # 导出主邮箱:-Mailbox参数传入完整邮箱地址
    New-MailboxExportRequest -Mailbox $FullEmail -FilePath "${ExportRootPath}${UserName}${PrimarySuffix}"
    # 导出归档邮箱:同样传入完整邮箱地址作为参数
    New-MailboxExportRequest -Mailbox $FullEmail -FilePath "${ExportRootPath}${UserName}${ArchiveSuffix}" -IsArchive
}

关键修改说明

  • 提取邮箱时使用Select-Object -ExpandProperty EmailAddress直接输出纯邮箱字符串,避免输出文件携带表头信息干扰后续读取
  • 取消错误的全局拆分邮箱前缀的逻辑,循环时直接读取每一行完整邮箱地址存入$FullEmail变量,专门用于-Mailbox参数
  • 循环内新增$UserName变量,仅拆分一次邮箱前缀,统一用于两个导出请求的路径拼接
  • 用${变量名}写法明确变量边界,避免字符串拼接时变量识别错误
  • 清理地址时新增空行过滤逻辑,避免空地址导致导出任务报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:42:00