Datetime 使用Powershell从Outlook电子邮件获取日期范围时遇到问题

Datetime 使用Powershell从Outlook电子邮件获取日期范围时遇到问题,datetime,powershell,Datetime,Powershell,使用Powershell ISE 4.0从Outlook电子邮件获取日期范围时出现问题。谁能告诉我这个脚本有什么问题吗?我可以让脚本部分工作,但日期排序根本不适合我 <# Outlook Data Mining Script You will need to install Powershell 4.0, otherwise known as Windows Management package so that you can get the program called 'Po

使用Powershell ISE 4.0从Outlook电子邮件获取日期范围时出现问题。谁能告诉我这个脚本有什么问题吗?我可以让脚本部分工作,但日期排序根本不适合我

<#  Outlook Data Mining Script

You will need to install Powershell 4.0, otherwise known as Windows Management package
   so that you can get the program called 'Powershell ISE'

    Finally, to run this, first, enable execution policy by running these commands:
    > Get-ExecutionPolicy
    > Set-ExecutionPolicy -Scope CurrentUser Unrestricted -Force

#>

cls 
Write-Host "Wait while we compile the inbox items..."

<# $oldestdate = (Get-Date).AddDays(-7) #>   

Get-OutlookInbox | where { ($_.ReceivedTime -gt [datetime]"12/28/13") }

<#  Filter examples:
   where { $_.Subject.StartsWith("RE:") } | 
   where { $_.ReceivedTime -gt [datetime]::Parse("12/20/2013") }
   sort ReceivedTime -Descending
   select subject, ReceivedTime -last 5
   #>


<# functions defined below here #>

Get-OutlookInBox function
Function Get-OutlookInBox
{

  <# .Synopsis
    This function returns InBox items from default Outlook profile
   .Description
    This function returns InBox items from default Outlook profile. It
    uses the Outlook interop assembly to use the olFolderInBox enumeration.
    It creates a custom object consisting of Subject, ReceivedTime, Importance,
    SenderName for each InBox item.

    *** Important *** depending on the size of your InBox items this function
    may take several minutes to gather your InBox items. If you anticipate
    doing multiple analysis of the data, you should consider storing the
    results into a variable, and using that.

   .Example
    Get-OutlookInbox |
    where { $_.ReceivedTime -gt [datetime]"5/5/11" -AND $_.ReceivedTime -lt `
    [datetime]"5/10/11" } | sort importance
    Displays Subject, ReceivedTime, Importance, SenderName for all InBox items that
    are in InBox between 5/5/11 and 5/10/11 and sorts by importance of the email.

   .Example
    Get-OutlookInbox | Group-Object -Property SenderName | sort-Object Count
    Displays Count, SenderName and grouping information for all InBox items. The most
    frequently used contacts appear at bottom of list.

   .Example
    $InBox = Get-OutlookInbox
    Stores Outlook InBox items into the $InBox variable for further
    "offline" processing.

   .Example
    ($InBox | Measure-Object).count
    Displays the number of messages in InBox Items

   .Example
    $InBox | where { $_.subject -match '2011 Scripting Games' } |
     sort ReceivedTime -Descending | select subject, ReceivedTime -last 5
    Uses $InBox variable (previously created) and searches subject field
    for the string '2011 Scripting Games' it then sorts by the date InBox.
    This sort is descending which puts the oldest messages at bottom of list.
    The Select-Object cmdlet is then used to choose only the subject and ReceivedTime
    properties and then only the last five messages are displayed. These last
    five messages are the five oldest messages that meet the string.

 #>

 Add-type -assembly "Microsoft.Office.Interop.Outlook" | out-null

 $olFolders = "Microsoft.Office.Interop.Outlook.olDefaultFolders" -as [type]

 $outlook = new-object -comobject outlook.application

 $namespace = $outlook.GetNameSpace("MAPI")

 $folder = $namespace.getDefaultFolder($olFolders::olFolderInBox)

 $folder.items |

 Select-Object -Property Subject, ReceivedTime, Importance, SenderName

} #end function Get-OutlookInbox

此脚本在我运行的计算机上运行良好:

Windows Server 2012标准版 Powershell 3.0 展望2010 我对它做了一点修改,只是为了删掉一些东西,但总的来说脚本是一样的:

function Get-OutlookInBox {
    Write-Host "Wait while we compile the inbox items..."

    Add-type -assembly "Microsoft.Office.Interop.Outlook" | out-null

    $olFolders = "Microsoft.Office.Interop.Outlook.olDefaultFolders" -as [type]
    $outlook = new-object -comobject outlook.application
    $namespace = $outlook.GetNameSpace("MAPI")
    $folder = $namespace.getDefaultFolder($olFolders::olFolderInBox)
    $folder.items | Select-Object -Property Subject, ReceivedTime, Importance, SenderName
}

我的问题是关于日期过滤。它看起来可以工作,但如果你仔细看,它只是返回日期范围内外的所有内容。对我来说,它返回的所有内容都大于指定的日期范围,之前没有任何内容。在上面的脚本中,我曾两次调用Get-OutlookInbox。我的错。谢谢你为我做了精神检查。我以为我疯了。