2015-06-26 2 views
1

х-пост от суперпользователяПопытка передать переменную Send-MailMessage аргументов и терпеть неудачу

Так у меня есть проблема.

Я пытаюсь написать сценарии, которые пингуют список имен хостов во внешнем файле .txt, и отправлять оповещение по электронной почте, если один из них идет вниз. У меня с этим несколько проблем, но главное сейчас - это то, что я не могу найти способ вставить переменную в строку темы или текст сообщения. Код, я использую, чтобы отправить по электронной почте оповещения теперь выглядит следующим образом:

send-mailmessage -to "$alertRecipient" -from "$alertSender" -subject "$alertSubject" -body "$alertBody" -smtpServer "$smtpServer" 

Теперь, я использовал много значений переменных в этой команде, и все они работают в какой-то степени. Я в основном смотрю $alertSubject и $alertBody. Значения обеих этих переменных вытягиваются из другого .txt-файла и равны «$ selHost is offline!».

$selHost - переменная, которую я использую в скрипте, чтобы быть равным имени хоста, над которым работает скрипт в любой момент времени. Если я делаю write-host $selHost в любом месте сценария, я получу что-то вроде «SomeComputerName» или «192.168.1.123», и его значение изменяется каждый раз, когда скрипт переключается на следующий хост.

Я хочу, чтобы буквальное значение $selHost было в теле сообщения предупреждения, когда оно отправлено, но так, как я его написал, когда отправлено предупреждение, он просто говорит: «$ selHost is offline!» я совершенно бесполезный уровень понимания природы потенциальной проблемы.

Pastebin link of my script as it is now.

Send-Mail-Message команда на линии 30, $selHost, определенной на линии 23, $alertSubject, определенная на линии 10, $alertBody, определенная на линии 12.

TL; ДР: Я хочу, чтобы вставить значение а переменную в аргументы команды Send-MailMessage, но я просто получаю имя переменной вместо этого, и я не знаю, что делать.

ответ

0

Ваша проблема не имеет ничего общего со значением $selHost.

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

$alertSubject = (get-content $runPath\config.txt)[1] 
$alertBody = (get-content $runPath\config.txt)[2] 
... 
# Don't to this immediately after string import. You need $selHost to be 
# defined by the script first. Otherwise it'll evaluate to $null. 
$alertSubject = $ExecutionContext.InvokeCommand.ExpandString($alertSubject) 
$alertBody = $ExecutionContext.InvokeCommand.ExpandString($alertBody) 
Смежные вопросы