2012-03-09 25 views
2

我已經寫了一個腳本來檢查兩個文本文件之間的差異。計劃Powershell更改ObjectType

$new = get-content $outPutFile 
    $old = get-content $outPutFileYesterday 
    $result = $null 
    $result = Compare-Object $old $new 

    $resultHTML = $result.GetEnumerator() | ConvertTo-Html 
    Send-MailMessage -SmtpServer 10.14.23.4 -From [email protected] -To $toAddress -Subject "DiffTest" -Body "$resultHTML" -BodyAsHtml 

當我從活動PowerShell提示符運行它,一切都很好。然而,當我嘗試安排其每天運行我上運行時此錯誤(塊以上是在嘗試捕捉該郵件的任何執行錯誤):

方法調用失敗,因爲[System.Management .Automation.PSCustomObject]不包含名爲「GetEnumerator」的方法。

我該如何解決這個問題?當調度時,有可能與組不同的讀/寫權限上的文件系統

回答

2

腳本可以在不同用戶上下文運行。

然而,在PowerShell中arrays are automatically enumerated在表達式中使用時,所以你不要把它傳遞給ConvertTo-Html之前需要 調用GetEnumerator()方法。

你可以通過改變你的腳本開始:

$resultHTML = $result | ConvertTo-Html 

,看看它如何影響結果。

+0

謝謝。解決了它。 – 2012-03-09 10:30:02

2

Compare-Object或者返回:

  • $null:如果ReferenceObject和DifferenceObject相等
  • PSCustomObject類型的對象:如果只有一個項目不同(1)
  • 一個對象數組:如果發現有多個差異

這些返回值val只有最後一個(數組)有一個GetEnumerator()方法。當提供這些返回值時,ConvertTo-Html會生成預期的輸出,因此您可以放心地刪除.GetEnumerator()部分(如Enrico所述)。另一種選擇是包裹$result在陣列中,這將改變線路6腳本給:

$resultHTML = @($result).GetEnumerator() | ConvertTo-Html

(1)這是一個在腳本中對比較對象的返回值

+0

明白了,謝謝:-) – 2012-03-10 02:55:03