Планирование изменений Powershell ObjectType - PullRequest
2 голосов
/ 09 марта 2012

Я написал небольшой скрипт, который проверяет различия между двумя текстовыми файлами.

    $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 me@mail.com -To $toAddress -Subject "DiffTest" -Body "$resultHTML" -BodyAsHtml

Когда я запускаю его из активной подсказки PowerShell, все хорошо. Однако, когда я пытаюсь запланировать его ежедневный запуск, я получаю эту ошибку во время выполнения (блок выше находится в перехватчике try, который отправляет сообщения об ошибках выполнения):

Ошибка вызова метода, поскольку [System.Management.Automation.PSCustomObject] не содержит метод с именем «GetEnumerator».

Как я могу это исправить?

Ответы [ 2 ]

2 голосов
/ 10 марта 2012

Compare-Object либо возвращает:

  • $null: если ReferenceObject и DifferenceObject равны
  • объект типа PSCustomObject: если отличается только один элемент (1)
  • массив объектов: если найдено несколько отличий

Из этих возвращаемых значений только последний (массив) имеет метод GetEnumerator(). ConvertTo-Html дает ожидаемый результат при подаче любого из этих возвращаемых значений, так что вы можете безопасно отбросить часть .GetEnumerator() (как упомянуто Энрико). Другой вариант - заключить $result в массив, который изменит строку 6 вашего скрипта на:

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

(1) Это возвращаемое значение для объекта сравнения в вашем скрипте

2 голосов
/ 09 марта 2012

Сценарий может выполняться в другом пользовательском контексте по расписанию, потенциально с другим набором разрешений на чтение / запись в файловой системе.

Однако вPowerShell массивы автоматически перечисляются при использовании в выражениях, поэтому вам не нужно вызывать метод GetEnumerator() перед передачей его в ConvertTo-Html .

Youможно начать с изменения вашего скрипта на:

$resultHTML =  $result | ConvertTo-Html

и посмотреть, как это повлияет на результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...