powershell - 用于提取 Outlook .msg 文件数据并使用 Msg 数据重命名 .msg 文件的 Powershell 脚本(例如,发送日期、主题)
问题描述
如果此请求位于错误的位置,请向 Stackoverflow 致歉。
我也是 PowerShell 的新手,并且一直在研究似乎由 PowerShell 提供的解决方案。我缺乏经验使我无法修改示例脚本,所以我在这里寻求帮助。
我的目标是使用从每个 .msg 文件中提取的数据重命名位于文件夹和子文件夹中的许多 Outlook .msg 文件。就我而言,我需要发送日期(Senton)(和主题,但不太重要)。目前,这很痛苦,是手动完成的,需要很长时间,所以我认为我们需要一些东西来半自动化解决方案。
我在各种论坛和博客上四处搜索,发现了一个似乎朝着我想要的方向发展的脚本(详情如下),但我只是没有技能来完成最后一点的发送日期和更改.msg 文件名。我尝试了各种引用变量 $msg.Seton 的管道解决方案。PowerShell 调试器表明带有注释“我的代码更改”的行具有良好的值,但会为每个对象迭代产生错误(与参数 NewName 相关)(见下文)。
任何有助于取得进展的帮助将不胜感激。同时,我将继续试验调试器。
该脚本来自此(http://jon.glass/blog/reads-e-mail-with-powershell/)站点,脚本看起来像......
Get-ChildItem "C:\Users\higginsr4\Test\StudyExamples\SmallMsgFolder" -Filter *.msg|
ForEach-Object{
$outlook = New-Object -comobject outlook.application
$msg = $outlook.CreateItemFromTemplate($_.FullName)
$msg | Select senderemailaddress,to,subject,Senton,body|ft -AutoSize
$msg | Rename-Item -NewName { $msg.Senton + $_.name} ## My code changes
}
PowerShell 调试器错误...
重命名项目:参数“NewName”的脚本块输入失败。无法将“op_Addition”的参数“1”,值为“”转换为“System.TimeSpan”类型:“无法将 null 转换为“System.TimeSpan”类型。” 在我的文档\WindowsPowerShell\Modules\GetEmailDetails\RobsGetEmailDetails.ps1:6 char:33 + $msg | 重命名项目 -NewName { $msg.Senton + $_.name} + ~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (System.__ComObject :__ComObject) [Rename-Item], ParameterBindingException + FullyQualifiedErrorId : ScriptBlockArgumentInvocationFailed,Microsoft.PowerShell.Commands.RenameItemCommand
我使用的是 Windows 7 企业版,但如果需要更多详细信息,请告诉我。
解决方案
在您尝试过的事情中要强调的几件事:-
$msg
是由基本类型创建的 ComObject,System.MarshalByRefObject
而不是实际的物理文件。因此,你在某种程度上偏离了你的目标。您正在将
-NewName
参数包含在脚本块中。Get-ChildItem
请注意,当您通过管道传输to的输出时,您已经完成了该操作Foreach-Object
。因此,额外的脚本块是多余的。
你可以做这样的事情 -
Get-ChildItem "C:\Users\higginsr4\Test\StudyExamples\SmallMsgFolder" -Filter *.msg |
ForEach-Object{
$outlook = New-Object -comobject outlook.application
$msg = $outlook.CreateItemFromTemplate($_.FullName)
$msg | Select senderemailaddress,to,subject,Senton,body|ft -AutoSize
Rename-Item -LiteralPath $_.FullName -NewName "$($_.Basename)_$($msg.Senton.ToString('ddMMyy')$($_.Extension)"
}
推荐阅读
- excel - 选中复选框时在特定时间运行宏(手动计算)
- r - 如果它们在 2 列中共享相同的值,如何将 2 行计为 1 行?
- oracle - Oracle 中的 sqlldr 错误
- c# - 如何使用 C# 中的任务在 Mongo 中包装批量更新插入
- amazon-web-services - Allow lambda to access particular s3 bucket in serverless config
- javascript - I can't extract element value in javascript
- javascript - Issues with multiple audio files in HTML onclick
- python - Python - 如何同时运行两个依赖函数?
- erlang - rebar3 安装插件失败
- python - cv2.createStitcher() 没有足够的关键点?