Powershell脚本,用于提取Outlook.msg文件数据并使用msg数据重命名.msg文件(例如发送日期、主题)
新手到Stackoverflow,如果此请求位于错误位置,请道歉 我也是PowerShell的新手,一直在研究PowerShell提供的解决方案。我缺乏经验,无法修改示例脚本,因此我在这里寻求帮助 我的目标是使用从每个.msg文件提取的数据重命名文件夹和子文件夹中的许多outlook.msg文件。在我的情况下,我需要发送日期(Senton)(和主题,但不太重要)。这是目前手动完成的,非常痛苦,而且需要很长时间,所以我认为我们需要一些东西来半自动化解决方案 我在各种论坛和博客上搜索过,发现一个脚本似乎正朝着我想要的方向发展(详情见下文),但我只是没有能力做最后一件事,即记录发送日期和更改.msg文件名。我尝试过各种管道解决方案,涉及变量$msg.Senton。PowerShell调试器指示带有注释“My code changes”的行具有良好的值,但会为每个对象迭代生成一个错误(与参数NewName相关)(请参见下文) 如有任何进展,将不胜感激。同时,我将继续试验调试器 脚本源于此()站点,脚本看起来像Powershell脚本,用于提取Outlook.msg文件数据并使用msg数据重命名.msg文件(例如发送日期、主题),powershell,Powershell,新手到Stackoverflow,如果此请求位于错误位置,请道歉 我也是PowerShell的新手,一直在研究PowerShell提供的解决方案。我缺乏经验,无法修改示例脚本,因此我在这里寻求帮助 我的目标是使用从每个.msg文件提取的数据重命名文件夹和子文件夹中的许多outlook.msg文件。在我的情况下,我需要发送日期(Senton)(和主题,但不太重要)。这是目前手动完成的,非常痛苦,而且需要很长时间,所以我认为我们需要一些东西来半自动化解决方案 我在各种论坛和博客上搜索过,发现一个脚本
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$\全名
是。这就解决了它!非常感谢您的帮助。这绝对是一种享受,干杯