2016-02-02 62 views
0

此PS 3.0代碼工作得很好,但突然拋出異常。我不明白這是指哪種方法。Powershell - 異常無法追蹤

param($mailboxName = "[email protected]", 
$smtpServerName = "a.NET", 
$emailFrom = "[email protected]", 
$emailTo = "[email protected]" 
) 
Clear-Host 
Set-ExecutionPolicy RemoteSigned 
Add-Type -Path "C:\Program Files\Microsoft\Exchange\Web Services\2.0\Microsoft.Exchange.WebServices.dll" 

try 
{ 
    $Exchange2007SP1 = [Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2007_SP1 
    $Exchange2010 = [Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2010 
    $Exchange2010SP1 = [Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2010_SP1 
    $Exchange2010SP2 = [Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2010_SP2 
    $Exchange2013 = [Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2013 
    $Exchange2013SP1 = [Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2013_SP1 

    $exchangeService = New-Object -TypeName Microsoft.Exchange.WebServices.Data.ExchangeService -ArgumentList $Exchange2010SP2 
    $exchangeService.UseDefaultCredentials = $true 
    $exchangeService.AutodiscoverUrl($mailboxName) 

$inboxFolderName = New-object Microsoft.Exchange.WebServices.Data.FolderId ([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox,$MailboxName) 
    $inboxFolder = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($exchangeService,$inboxFolderName) 
    $Sfha = new-object Microsoft.Exchange.WebServices.Data.SearchFilter+IsEqualTo ([Microsoft.Exchange.WebServices.Data.EmailMessageSchema]::HasAttachments, $true) 
    $sfCollection = new-object Microsoft.Exchange.WebServices.Data.SearchFilter+SearchFilterCollection ([Microsoft.Exchange.WebServices.Data.LogicalOperator]::And); 

    $ItemView = New-Object Microsoft.Exchange.WebServices.Data.ItemView(10) 

$downloadDir = "D:\Files" 
    $Results = $inboxFolder.FindItems($sfha,$ItemView) 
    $today = Get-Date -Format "dd-MM-yyyy" 
    #$Results 
    cd $downloadDir 
    mkdir $today 

    foreach ($Res in $Results.Items) 
    { 
    $Res 
    $Res.Load() 
    $fiFile = new-object System.IO.FileStream(($downloadDir + 「\」 + $today + "\" + $attach.Name.ToString()),  [System.IO.FileMode]::Create) 

    foreach ($attach in $Res.Attachments) 
    { 
     $attach.Load()   
     $fiFile.Write($attach.Content, 0, $attach.Content.Length) 
    write-host "Downloaded Attachment : " + (($downloadDir + 「\」 + $attach.Name.ToString())) 
    } 
    $fiFile.Close()  
    $Res.isread = $true 
    $Res.Update([Microsoft.Exchange.WebServices.Data.ConflictResolutionMode]::AlwaysOverwrite) 
} 

}catch 
{ 
     echo $_.Exception | format-list -Force 
} 

錯誤是:

ErrorRecord     : You cannot call a method on a null-valued expression. 
StackTrace     : at CallSite.Target(Closure , CallSite , Object) 
           at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0) 
           at System.Management.Automation.Interpreter.DynamicInstruction`2.Run(InterpretedFrame frame) 
           at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame) 
           at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame) 
WasThrownFromThrowStatement : False 
Message      : You cannot call a method on a null-valued expression. 
Data      : {System.Management.Automation.Interpreter.InterpretedFrameInfo} 
InnerException    : 
TargetSite     : Void CheckActionPreference(System.Management.Automation.Language.FunctionContext, System.Exception) 
HelpLink     : 
Source      : System.Management.Automation 
HResult      : -2146233087
+1

你看不到是什麼方法調用它的原因是你已經通過執行'$ _。 format-list -Force'。要查看原始的ErrorRecord,請檢查'$ Error [0]'或將'catch'塊更改爲'throw' –

+0

謝謝Matt。我在for循環之外使用附件。現在一切都很好。 :) – skrubber

+0

很酷,發表一個答案! (如果你自己設法解決問題,發佈並接受你自己問題的答案是完全沒問題的)(http://meta.stackexchange.com/questions/17463/can-i-answer-my-own-questions - 即使我知道答案之前問)):) :) –

回答

0

我用$ fiFile外部for循環在使用附件($附加)。移動了$ fiFile的聲明,並且它工作正常。所有,因爲我把回聲$ Error [0]在catch塊內。