2016-06-21 3 views
0

Я пытаюсь отправить вывод состояния виртуальной машины из Azure автоматизации runbook в электронную почту, я использую следующий код:Azure выхода runbook по электронной почте

function Send-EMail { 
Param (
    [Parameter(Mandatory=$true)] 
    [String]$EmailTo, 
    [Parameter(Mandatory=$true)] 
    [String]$Subject, 
    [Parameter(Mandatory=$true)] 
    [String]$Body, 
    [Parameter(Mandatory=$false)] 
    [String]$EmailFrom="[email protected]", #This gives a default value to the $EmailFrom command 
    [parameter(Mandatory=$false)] 
    [String] $SmtpServer = (Get-AutomationVariable -Name 'SmtpHost'), 
    [parameter(Mandatory=$false)] 
    [String] $SmtpUsername = (Get-AutomationVariable -Name 'SmtpUsername'), 
    [parameter(Mandatory=$false)] 
    [String] $SmtpPassword = (Get-AutomationVariable -Name 'SmtpPassword') 
) 

    $SMTPMessage = New-Object System.Net.Mail.MailMessage($EmailFrom,$EmailTo,$Subject,$Body) 
    $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 25) 
    $SMTPClient.EnableSsl = $true 
    $SMTPClient.Credentials = New-Object System.Net.NetworkCredential($SmtpUsername, $SmtpPassword); 
    $SMTPClient.Send($SMTPMessage) 
    Remove-Variable -Name SMTPClient 
    Remove-Variable -Name SmtpPassword 

} #End Function Send-EMail 

$AutomationCredentialAssetName = "PScredential" 

# Get the credential asset with access to my Azure subscription 
$Cred = Get-AutomationPSCredential -Name $AutomationCredentialAssetName 

# Authenticate to Azure Service Management and Azure Resource Manager 

Add-AzureRmAccount -Credential $Cred | Out-Null 

$VMStatus = Get-AzureRmVM -Name "vm0" -ResourceGroupName "TestRG" -Status 


Send-EMail -EmailTo "[email protected]" -Body "$VMStatus" -Subject "vm0 Status" 

Я ожидаю выход электронной почты для печати точного статуса на выходе, тогда как он печатает объект Microsoft.Azure.Commands.Compute.Models.PSVirtualMachineInstanceView '

Может кто-нибудь помочь, как получить содержимое объекта в виде строки в электронной почте?

ответ

0

Добавить ссылку на переменную (например, $ MyVar) в тело электронной почты, которая по умолчанию просто вернет тип объекта, в котором вывод в PowerShell является специальным конвейерным действием, которое отображает содержимое как в виде списка, так и в виде таблицы. Чтобы включить контент в электронную почту, нам нужно будет ссылаться на разные свойства по отдельности.

Ниже приведен пример:

[string]$EmailBody = (“Property 1 = [{0}], Property 2 = [{1}], Property 3 = [{2}]” -f $MyObject.Property1, $MyObject.Property2, $MyObject.Property3) 

В строке выше будет установить переменный $ EmailBody, который является строкой включает в себя три свойства переменного объекта с именем $ MyObject. Если бы мы просто ссылались на вывод $ MyObject for PowerShell, все свойства отображались бы, но для включения свойств в электронное письмо мы должны ссылаться на них отдельно.

0

Пожалуйста, измените

$VMStatus = Get-AzureRmVM -Name "vm0" -ResourceGroupName "TestRG" -Status 

Для

$VMStatus = Get-AzureRmVM -Name "vm0" -ResourceGroupName "TestRG" -Status | select -expand Statuses 

Первая команда возвращает объект PSVirtualMachineInstanceView в то время как вторая команда возвращает массив строк.

+0

Хм. Еще не повезло. Не знаю, что я пропустил. Я использовал указанный формат. $ Body = Get-AzureRmVM -Name "vm0" -ResourceGroupName "TestRG" -Status | выберите -expand Statuses – Satheesh

Смежные вопросы