【问题标题】:Powershell Script to extract Outlook .msg files Data and Rename .msg file using Msg data (e.g. Date Sent, Topic)用于提取 Outlook .msg 文件数据并使用 Msg 数据重命名 .msg 文件的 Powershell 脚本(例如,发送日期、主题)
【发布时间】:2018-07-26 09:02:34
【问题描述】:

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 + $味精 |重命名项目 -NewName { $msg.Senton + $_.name} + ~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (System.__ComObject:__ComObject) [Rename-Item], ParameterBindingException + FullyQualifiedErrorId : ScriptBlockArgumentInvocationFailed,Microsoft.PowerShell.Commands.RenameItemCommand

我使用的是 Windows 7 企业版,但如果需要更多详细信息,请告诉我。

【问题讨论】:

    标签: powershell


    【解决方案1】:

    在您尝试过的事情中要强调的几件事:-

    1. $msg 是由基本类型 System.MarshalByRefObject 创建的 ComObject,而不是实际的物理文件。因此,您在某种程度上偏离了您的目标。

    2. 您在脚本块中包含-NewName 参数。请注意,当您将Get-ChildItem 的输出通过管道传输到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)"
        }
    

    【讨论】:

    • 谢谢维韦克。我仍然在下面收到调试错误。似乎暗示要重命名的文件不存在。有什么想法吗?......重命名项目:无法重命名,因为项目位于 'C:\Users\higginsr4\Test\StudyExamples\SmallMsgFolder\06327 – Corros – 请求的 MHRA 应用程序文档 - [yyyy -mm-dd].msg' 不存在。在 \\nuth-rnas01\home37\Departmental Home Drives\H\HigginsR4\My Documents\WindowsPowerShell\Modules\GetEmailDetails\RobsGetEmailDetails.ps1:7 char:5 + Rename-Item -path $_.FullName -NewName "$($ msg.Senton.ToString('ddmmyy') + ' ... + ...
    • 小更正@vivek。 'ddmmyy' 应该是 'ddMMyy'。否则它工作得很好。
    • 嗨 Vivek,我仍然有调试错误。将代码行 6 更改为 **** Rename-Item -path $_.FullName -NewName "$($msg.Senton.ToString('ddMMyy') + '_' + $($_.name))" ** **,但现在调试错误 *****重命名项目:无法重命名,因为项目位于 'C:\Users\higginsr4\Test\StudyExamples\SmallMsgFolder\06327 – Corros – 修正 – 需要赞助商分类 - [yyyy-mm -dd].msg' 不存在。在 \\\My Documents\WindowsPowerShell\Modules\GetEmailDetails\RobsGetEmailDetails.ps1:7 char:5 + Rename-Item -path $_.FullName -NewName "$($msg.Senton.ToString(' ddMMyy') + ' ...
    • @RohinSidharth - 谢谢。我纠正了它。我正在采取分钟属性。文件真的存在吗?你验证了吗?试试Rename-Item -LiteralPath $_.FullName 而不是Rename-Item -path $_.FullName
    • 是的。解决了它!非常感谢您的帮助。绝对是一种享受,干杯
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    • 1970-01-01
    • 2019-11-18
    • 2014-12-25
    • 1970-01-01
    • 2014-12-06
    相关资源
    最近更新 更多