对于传递给Stackoverflow的新手,如果此请求的位置错误,我们深表歉意。
我也是PowerShell的新手,并且一直在研究似乎由PowerShell提供的解决方案。由于缺乏经验,我无法修改示例脚本,因此我在这里寻求帮助。
我的目标是使用从每个.msg文件提取的数据重命名位于文件夹和子文件夹中的许多Outlook .msg文件。就我而言,我需要发送日期(Senton)(和主题,但不太重要)。目前,这很痛苦,是手动完成的,而且需要很长时间,所以我认为我们需要一些使解决方案半自动化的东西。
我在各种论坛和博客中进行了搜索,发现一个脚本似乎正朝着我想要的方向前进(以下详细信息),但我只是不具备执行发送日期的最后一刻的技能并更改.msg文件名。我尝试了各种涉及变量$ msg.Senton的管道解决方案。 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调试器错误...
Rename-Item:参数'NewName'的脚本块输入失败。无法将“ op_Addition”的参数“ 1”转换为值“”,以将“ op_Addition”键入“ 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 Enterprise,但是如果需要更多详细信息,请告诉我。
答案 0 :(得分:1)
在您尝试过的过程中要强调的几件事:-
$msg
是由基本类型System.MarshalByRefObject
创建的ComObject,而不是实际的物理文件。因此,您有点偏离目标。
您正在脚本块中包含-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)"
}