Então, se eu estou lendo o script (e entendendo sua descrição) corretamente, você tem duas variáveis, $alertSubject
e $selHost
Ambas as variáveis são preenchidas com arquivos de texto (config.txt e hosts.txt, respectivamente).
Estou assumindo que a linha do config.txt que termina na variável de assunto é literalmente digitada como: $ selHost está off-line!
O problema é que, quando o PowerShell lê esse arquivo, ele trata a string como, literalmente, uma string. Não há Varibale Expansion acontecendo lá.
Você tem duas opções para resolver isso facilmente:
Opção 1: declare o assunto depois de obter o nome do host
Você poderia fazer algo assim:
$selHost = (GET-CONTENT $runPath\hosts.txt)[$it]
$alertSubject = "$selHost is offline!"
Isso expandiria a variável e você acabaria com a saída esperada.
Como alternativa, se você ainda deseja obter a maior parte do assunto do seu arquivo config.txt, sugiro alterá-lo de "$ selHost is offline!" para "está offline!" (observe o espaço no começo.)
Você pode escrever como:
$alertSubject = (get-content $runPath\config.txt)[1] # You can leave this on line 10
# ...
$selHost = (GET-CONTENT $runPath\hosts.txt)[$it]
$alertSubjectSend = $selHost + $alertSubject # Use this 'send' variable in the Send-MailMessage cmdlet call
Isso combinará as duas strings em uma.
Opção 2: use o método replace
Send-MailMessage -To $alertRecipient -From $alertSender -Subject ($alertSubject.Repalce('$selHost', $selHost)) -Body $alertBody -SmtpServer $smtpServer
Em foco mais próximo: -Subject ($alertSubject.Repalce('$selHost', $selHost))
Perceba que estamos buscando substituir '$selHost'
(o literal string , as aspas simples são importantes para que a variável não seja expandida). Queremos substituí-lo por $selHost
(o valor armazenado na variável, sem aspas, para que ele se expanda, embora você possa usar aspas duplas, se quiser).
A coisa toda é colocada entre colchetes, para que esse pequeno chunck seja avaliado primeiro e o resultado seja passado para o cmdlet.
Você também pode optar por salvá-lo em uma variável temporária; método também:
$alertSubjectSend = $alertSubject.Repalce('$selHost', $selHost)