2012-03-09 28 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