我当前正在运行一个脚本,该脚本从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
应该在后续管道段中,以便接收所有对象写入文件,如上所示
- 除此之外,