powershell - 使用 Powershell 显示存储在 Windows 文件夹中的电子邮件的附件大小
问题描述
我所追求的是保存在 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()
输出:
文件名大小
电气证书 - 国内 EIC_Ref62036711.pdf 0
希望这是我错过的非常简单的事情。
谢谢
解决方案
从文档:
此信息可能并不总是可用于附件。例如,在 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
推荐阅读
- java - 如何在 Android 上使用 Excel 中的公式“F.INV.RT”计算值?
- c - 如何使用 ptrace 阻止 tracee 捕获 SIGTRAP
- jquery - 赛普拉斯不使用 jQuery 打开下载链接弹出窗口不起作用
- python - 将 BSON 文件转换为 JSON 会导致内容丢失
- python - Python 内置数据类型怎么可能具有具有相同数据类型的属性?
- php - 将 base_url 与模型函数一起使用
- html - Bootstrap 固定顶部导航栏
- bash - Bash 多重与或逻辑运算
- c# - 是否需要 volatile 关键字来保证对象引用的更改最终被其他线程观察到?
- python - Python:DateTime-Objects 可以在 matplotlib 中绘制,但只是有时?