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
相关产品推荐
相关产品推荐

