Я пишу небольшие служебные скрипты в Powershell.Пытаясь следовать принципу «отлично выполнять одну работу для каждого сценария», я сталкиваюсь с проблемой с одним сценарием, который возвращает нулевое значение в случае успеха.Когда я пытаюсь выполнить команду и передать ее через такую команду, как Send-MailMessage
, я получаю сообщение об ошибке, когда она должна быть успешной.Я пытаюсь заставить Send-MailMessage
срабатывать только при наличии выходных данных в теле (в противном случае было бы много писем, приходящих).
В настоящее время я пытаюсь запустить это из командной строки Powershell:
Send-MailMessage -From "powershell@example.com" -To "tech@example.com" -Subject "Disk usage on $($env:COMPUTERNAME)" -SmtpServer "192.168.0.1" -Body (.\diskUsage.ps1 | Out-String) -ErrorAction Continue
Полученная ошибка:
Send-MailMessage : Cannot validate argument on parameter 'Body'. The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.
At line:1 char:156
+ ... SmtpServer "192.168.0.1" -Body (.\diskUsage.ps1 | Out-String) -ErrorA ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (:) [Send-MailMessage], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.SendMailMessag
Моя цель - запустить команду удаленно на многих компьютерах,и только получать уведомления по электронной почте, когда использование диска превышает пороговое значение.Мой сценарий в настоящее время ничего не возвращает, если проверка дискового пространства в порядке, и это мое ожидаемое поведение.Мне нужно Send-MailMessage
, по самой команде, просто не запускаться, если в теле нечего положить, без появления в консоли сообщения о том, что тело пусто.