powershell将列添加到具有Mailbox属性的现有csv文件中



我当前正在运行一个脚本,该脚本从CSV文件中获取Exchange Online邮箱列表,并将它们转换为共享邮箱。然后,我让脚本等待一段时间,然后再次循环CSV并提取邮箱类型。这是一次检查,以确认邮箱是否已成功转换。最后,我希望它在CSV文件中添加一个邮箱类型的新列。

目前,除了写回CSV之外,一切似乎都正常工作。CSV最终为空。

$SMTP = import-csv -Path .Convert.csv | & {
process {
Set-Mailbox -Identity $_.FullAddress -Type Shared -MessageCopyForSentAsEnabled $True -MessageCopyForSendOnBehalfEnabled $True -ErrorAction Continue -WarningAction Continue
}

}
Start-Sleep -Seconds 15

$SMTP = import-csv -Path .Convert.csv | & {
process {
$MBType = Get-EXOMailbox -Identity $_.FullAddress | Select RecipientTypeDetails
Select-Object *,@{Name='Type';Expression={$MBType}} |

Export-CSV -Path .Convert.csv -NoTypeInformation
}
}

起初我认为这是因为它无法写入打开的文件,但当导出到新的CSV时,结果仍然是一个空白文件。

提前感谢您的帮助。

尝试以下操作:

(Import-Csv .Convert.csv) | 
Select-Object *, 
@{
Name = 'Type'
Expression = { (Get-EXOMailbox -Identity $_.FullAddress).RecipientTypeDetails } 
} |
Export-CSV -Path .Convert.csv -NoTypeInformation
  • Import-Csv调用周围的(...)确保输入文件首先被完全读取到内存中,这是在同一管道中写回同一文件的先决条件。

    • 也就是说,如果将第一个管道更改为($SMTP = import-csv -Path .Convert.csv) | ...,则可以使用$SMTP作为第二个管道的输入,而不是(Import-Csv .Convert.csv)
  • 您可以使用添加的计算特性直接通过管道连接到Select-Object


至于您尝试了什么

  • 您的Select-Object调用缺少输入,应该是:$_ | Select-Object ...,以便处理手头的输入对象(如自动$_变量中所反映的(。

  • 在没有输入的情况下,Select-Object产生无输出,因此Export-Csv产生空文件

    • 除此之外,Export-Csv应该在后续管道段中,以便接收所有对象写入文件,如上所示

最新更新