2012-03-09 3 views
2

私は、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プロンプトから実行すると、すべて正常です。しかし、毎日実行するようにスケジュールを設定しようとすると、実行時にこのエラーが発生します(上のブロックは、実行エラーを送信するtry catchにあります)。

[System.Management .Automation.PSCustomObject]には 'GetEnumerator'という名前のメソッドが含まれていません。

どうすればこの問題を解決できますか?スケジュール時

答えて

2

スクリプトは、潜在的に、ファイルシステム上の読み取り/書き込み権限の異なるセットで、異なるユーザーコンテキストで実行することができます。あなたはConvertTo-Htmlに渡す前に コールGetEnumerator()方法を必要としないので、式の中で使用PowerShellのarrays are automatically enumeratedでしかし

、。

$resultHTML = $result | ConvertTo-Html 

をし、どのようにそれを影響の結果を参照してください。

あなたはにスクリプトを変更することで開始することができます。

+0

:別のオプションは、にスクリプトの6行目を変更します配列に$resultをラップすることですありがとう。それを解決した。 –

2

Compare-Objectいずれか戻り値:

  • $null:ReferenceObjectとDifferenceObject型PSCustomObjectのオブジェクト
  • 等しい場合に1つだけの項目が(1)
  • が異なる場合、オブジェクトの配列複数の相違が見つかった場合

これらのうち、最後のもの(配列)にはGetEnumerator()メソッドがあります。 ConvertTo-Htmlは、これらの戻り値のいずれかが入力されたときに期待される出力を生成するので、.GetEnumerator()の部分を安全に削除できます(Enricoの記述どおり)。

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

(1)これは、スクリプトの中で比較するオブジェクトの戻り値である

+0

ありがとう:-) –

関連する問題