Электронная почта Powershell Runbook с вложенным файлом CSV

Я хочу отправить электронное письмо из моего сценария Runbook PowerShell, я бы хотел прикрепить файл CSV в качестве выходных данных сценария, который хранится в хранилище blob в моей подписке Azure.

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

New-Object: исключение, вызывающее ".ctor" с аргументом (ами) "1": "Не удалось найти файл 'C: \ Users \ Client \ Temp \ xxxxxxxx.csv'."

это мой результат -> $ ArrayStatus | Export-Csv -NoTypeInformation -Path "$ filename"

$ filename - это расположение файла CSV

$ArrayStatus | Export-Csv -NoTypeInformation -Path "$filename"
Get-AzureStorageBlob -Container "xxx" -Blob "$filename" -Context $Context 
Get-AzureStorageBlobContent -force
$attachment = "$filename"

Function Email ($EmailTo, $Body){
$EmailFrom = "xxx"
$Subject = "xxx Alert" 
$SMTPServer = "xxx" 
$SMTPMessage = New-Object 
System.Net.Mail.MailMessage($EmailFrom,$EmailTo,$Subject,$Body)
$attach = New-Object System.Net.Mail.Attachment($attachment)
$SMTPMessage.Attachments.Add($attach)
$SMTPMessage.IsBodyHTML = $false
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, xx) 
$SMTPClient.EnableSsl = $true 
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("xx", 
"xx");  
$SMTPClient.Send($SMTPMessage)
            }

Я получаю электронное письмо, но без прикрепленного файла CSV


person tester81    schedule 04.07.2019    source источник


Ответы (2)


При условии, что вы загрузили выходные данные export-csv в хранилище BLOB-объектов Azure с помощью Set-AzureStorageBlobContent успешно. Вы можете использовать приведенный ниже фрагмент, чтобы прочитать большой двоичный объект из контейнера хранения и сохранить его в локальном месте назначения, а также получить содержимое файла и отправить электронное письмо в виде вложения.

# Setting the Azure Storage Context,recommedation is to read sastoken from Runbook assets for security purpose.
$context = New-AzureStorageContext -StorageAccountName "storageaccountname" -SasToken "your storage account sastoken"

# Get the blob contents from storage container and store it local destination . 
Get-AzureStorageBlob -Container "containername" -Blob "filename.csv" -Context $context | Get-AzureStorageBlobContent -force -Destination .

#Get contents of the file
$attachment = Get-Content "filename.csv"

#send an email (provided the smtp server is reachable from where ever you are running this script) 
Send-MailMessage -From '[email protected]' -To '[email protected]' -Subject 'Content from Blob Storage' -Body "CSV File from Storage blob, sending an attachment for testing" -Attachments .\filename.csv -Priority High -DeliveryNotificationOption OnFailure -SmtpServer 'smtpserver'

Надеюсь это поможет.

person bharathn-msft    schedule 08.07.2019

Я не использовал процесс загрузки и загрузки BLOB-объектов. Но я просто сохранил выходной файл по локальному пути и загрузил его оттуда.

Хорошо, вот что я сделал:

$OutputFileName = "Test.xlsx"
$asOutput | Export-Excel $OutputFileName -AutoSize -AutoFilter -Append
Send-MailMessage -To $reciever -from $sender -Attachments ".\Test.xlsx" -Subject 'Non-Compliance Report of subscription' -Body "PFA"  -smtpserver smtp.office365.com -usessl -Credential $credemail -Port 587 

Я просто использовал ".\", чтобы перейти к локальному пути, по которому файл сохраняется из выходного Excel.

person Pranjal Munjal    schedule 03.12.2020