Powershell脚本,用于提取Outlook.msg文件数据并使用msg数据重命名.msg文件(例如发送日期、主题)

Powershell脚本,用于提取Outlook.msg文件数据并使用msg数据重命名.msg文件(例如发送日期、主题),powershell,Powershell,新手到Stackoverflow,如果此请求位于错误位置,请道歉 我也是PowerShell的新手,一直在研究PowerShell提供的解决方案。我缺乏经验,无法修改示例脚本,因此我在这里寻求帮助 我的目标是使用从每个.msg文件提取的数据重命名文件夹和子文件夹中的许多outlook.msg文件。在我的情况下,我需要发送日期(Senton)(和主题,但不太重要)。这是目前手动完成的,非常痛苦,而且需要很长时间,所以我认为我们需要一些东西来半自动化解决方案 我在各种论坛和博客上搜索过,发现一个脚本

新手到Stackoverflow,如果此请求位于错误位置,请道歉

我也是PowerShell的新手,一直在研究PowerShell提供的解决方案。我缺乏经验,无法修改示例脚本,因此我在这里寻求帮助

我的目标是使用从每个.msg文件提取的数据重命名文件夹和子文件夹中的许多outlook.msg文件。在我的情况下,我需要发送日期(Senton)(和主题,但不太重要)。这是目前手动完成的,非常痛苦,而且需要很长时间,所以我认为我们需要一些东西来半自动化解决方案

我在各种论坛和博客上搜索过,发现一个脚本似乎正朝着我想要的方向发展(详情见下文),但我只是没有能力做最后一件事,即记录发送日期和更改.msg文件名。我尝试过各种管道解决方案,涉及变量$msg.Senton。PowerShell调试器指示带有注释“My code changes”的行具有良好的值,但会为每个对象迭代生成一个错误(与参数NewName相关)(请参见下文)

如有任何进展,将不胜感激。同时,我将继续试验调试器

脚本源于此()站点,脚本看起来像

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” 在My Documents\WindowsPowerShell\Modules\GetEmailDetails\RobsGetEmailDetails.ps1:6 char:33 +$msg |重命名项-NewName{$msg.Senton+$|.name} + ~~~~~~~~~~~~~~~~~~~~~~~~ +CategoryInfo:InvalidArgument:(系统._-ComObject:_-ComObject)[重命名项],参数BindingException +FullyQualifiedErrorId:ScriptBlockArgumentInvocationFailed,Microsoft.PowerShell.Commands.RenameItemCommand


我正在使用Windows 7 Enterprise,但如果需要进一步的详细信息,请告诉我。

在您尝试过的内容中,有几点需要强调:-

  • $msg
    是由基本类型
    System.MarshallByRefObject
    创建的ComObject,而不是实际的物理文件。因此,你有点偏离了你的目标

  • 您正在脚本块中包含
    -NewName
    参数。注意,当您将
    Get ChildItem
    的输出管道传输到
    Foreach对象时,您已经完成了这项工作。因此,额外的脚本块是多余的

  • 你可以这样做-

    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)"
        }
    

    谢谢Vivek。我仍然得到下面的调试错误。似乎暗示要重命名的文件不存在。有什么想法吗?。。。。。。。。。。。。。重命名项:无法重命名,因为请求的“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+重命名项-路径$\uuu.FullName-NewName“$($msg.Senton.ToString('ddmmyy'))+'…+…小更正@vivek.
    'ddmmyy'
    应该是
    'ddmmyy'
    。否则它工作得很好。嗨,vivek,我仍然有一个调试错误。将代码行6更改为****重命名项-路径$\全名-新名“$($msg.Senton.ToString($ddmmyy')+'+$($\全名))“******,但调试错误现在为******重命名项目:无法重命名,因为项目位于'C:\Users\higginsr4\Test\StudyExamples\SmallMsgFolder\06327–Corros–Amendment–需要赞助商分类-[yyyy-mm-dd].msg“不存在。位于\\\My Documents\WindowsPowerShell\Modules\GetEmailDetails\RobsGetEmailDetails.ps1:7字符:5+重命名项-路径$\uU4.FullName-NewName“$($msg.Senton.ToString('ddMMyy'))+'…@Rohindharth-谢谢。我更正了它。我正在使用minute属性。该文件确实存在吗?您验证了吗?尝试
    重命名Item-LiteralPath$\全名
    而不是
    重命名Item-path$\全名
    是。这就解决了它!非常感谢您的帮助。这绝对是一种享受,干杯