Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Email 将Outlook邮件移动到Powershell_Email_Powershell_Outlook - Fatal编程技术网

Email 将Outlook邮件移动到Powershell

Email 将Outlook邮件移动到Powershell,email,powershell,outlook,Email,Powershell,Outlook,我正在尝试编写一个脚本,从超过10天的文件夹中的邮件下载附件,将其保存到我的硬盘,然后将邮件移动到“已删除邮件”文件夹。到目前为止,附件下载工作正常,但当我添加代码来移动电子邮件时,它只对我文件夹中的一半电子邮件起作用。代码如下所示。谢谢你的帮助 $Folder.Items | foreach{ $Received = New-Object DateTime $Received = $_.ReceivedTime $howOld = New-Object int

我正在尝试编写一个脚本,从超过10天的文件夹中的邮件下载附件,将其保存到我的硬盘,然后将邮件移动到“已删除邮件”文件夹。到目前为止,附件下载工作正常,但当我添加代码来移动电子邮件时,它只对我文件夹中的一半电子邮件起作用。代码如下所示。谢谢你的帮助

$Folder.Items | foreach{
    $Received = New-Object DateTime
    $Received = $_.ReceivedTime

    $howOld = New-Object int
    $howOld = $Today.subtract($Received)
    $howOld = $howOld | select-object -ExpandProperty Days

    $date = $_.ReceivedTime.ToString("MMddyyyy")

    $howOld

    if ($howOld -gt 10){
           #Save Attachment To Folder
           $_.attachments | foreach{
           $fileName = $_.filename
           $split = $fileName.Split('.')
           $fileName = $split[0]
           $fileExtension = $split[1]
           $fileName = $fileName + '_' + $date + '.' + $fileExtension

           $_.saveasfile((Join-Path $filepath $fileName))
           }
        #Move to Deleted Folder
        $result = $_.Move($deletedFolder)
    }
}

能够通过更改循环结构来解决问题。我没有使用foreach,而是改为迭代计数器

$emails = $Folder.Items 
For ($i=($emails.count-1);$i -ge 0;$i--)

这就纠正了问题

你也可以用蛮力来做

while ($mails.count -gt 0)
{
    foreach ($mail in $mails) 
    {
        $mail.move($archive)
    }
    $mails = ($inbox.folders.Item("test")).items
}   

$Folder
是什么类型的对象?您还可以尝试使用
Move Item
cmdlet,而不是使用对象
。Move()
methodMove Item给了我一条错误消息FullyQualifiedErrorId:PathNotFound,Microsoft.PowerShell.Commands.MoveItemCommand$Folder是一个系统。\uu ComObject。这可能是因为路径是$Folder.item的属性,而不是项目本身。它是哪种类型的物体?你能告诉我如何找到它吗?老实说,我不确定。发布创建$folder的代码行,它可能类似于
$folder=New object-comobject Shell.Application
$folder=$sh.Namespace($filepath)
很高兴您自己找到了一些东西。我只是想知道,当存在Get-Item和Move-Item cmdlet之类的东西时,为什么要使用ComObject来执行此操作