我想要的是保存在windows共享中的Outlook电子邮件的附件大小。我可以显示附件的名称,但文件大小不正确,因为在本例中应该是6,357KB
POWERSHELL脚本:
$outlook = New-Object -comobject outlook.application
Get-ChildItem "C:\Users\mail\downloads" -Filter *.msg |
ForEach-Object {
$msg = $outlook.Session.OpenSharedItem($_.FullName)
$msg.Attachments | Select FileName, Size
}
$outlook.Quit()
输出:
FileName大小
电气证书-国内EIC_Ref62036711.pdf 0
希望这是我错过的非常简单的东西。
谢谢
发布于 2021-09-13 11:20:02
从docs
此信息可能并不总是可用于附件。例如,在S/MIME邮件中,在提取附件之前,实际的附件大小是未知的。在无法确定附件大小的情况下,此属性返回0。
您可以将附件保存到临时路径,然后获取大小:
function Select-AttachmentSizes {
param (
[Parameter(ValueFromPipeline)]
$Message
)
if ($Message.Attachments.Count -gt 0) {
$tempPath = [System.IO.Path]::GetTempFileName()
try {
foreach ($attachment in $Message.Attachments) {
$size = $attachment.Size
# if size can't be determined, save to temp file
if ($size -eq 0) {
$attachment.SaveAsFile($tempPath)
$size = (Get-Item $tempPath).Length
}
# return name and size
[PSCustomObject]@{
FileName = $attachment.FileName
Size = $size
}
}
}
finally {
Remove-Item -LiteralPath $tempPath -ea SilentlyContinue
}
}
}
用法:
$msg | Select-AttachmentSizes
https://stackoverflow.com/questions/69161553
复制相似问题