私の目標は、CSVのヘッダであるファイル名とデバイス名の2つの列をキャプチャして、URLから脅威データを含むCSVをダウンロードすることです。そのデータを電子メールで1行にエクスポートし、セキュリティチームの2人のメンバーにプレインテキスト形式で確認します。目標は、CSVに無関係のデータがたくさんあるため、CSVからペーストを直接ダウンロードしてコピーする必要がないようにすることです。Powershell - CSVデータをテーブルにメールで送信
これはかなり簡単なスクリプトなので、すべて正常に動作します。私の質問です:どのように私はcsvからデータの2つの列を引っ張って、電子メール本文に書き込むのですか?理想的には、ある種のテーブルでは、2つの列が一列に並んでいます。
は、私が最も顕著なのは、オンラインのHTMLにオブジェクト(表)を変換、PowerShellのインターフェースから任意のオブジェクトを受け取り、その後、電子メールでそれを送信するスクリプトをいくつかのリソースを見つけた:以来、完璧ですhttps://gallery.technet.microsoft.com/scriptcenter/bd0c8d87-466f-4488-92a2-0f726cb6f4cd
これはまさに私がやりたいことです。私は、CSVからpowershell関数にデータを正しく渡す方法が本当にわかりません。
これはPowerShellの私の最初のプロジェクトでもあり、テクニカルドキュメントとオンラインで見つかったコード例のスクラップから、私はジュニアシステム管理者ですので、プログラミングのバックグラウンドはあまりありません。
ありがとうございます! 1
アップデートだからこの時期に少しより多くの成功を得ることができたが、残念ながら電子メールで送信出力がCSV内で見つかった任意のデータに対応していない番号の文字化けリストがあります。
私はエラーがどこかここであるかなり確信しているが、私は、私は失敗してるところはかなりよく分からない:
$csv = Import-Csv $output | Select "File Name",DeviceName | ConvertTo-Html
私のコードの残りの部分は以下の通りです:
<#
.SYNOPSIS
Send an email with an object in a pretty table
.DESCRIPTION
Send email
.PARAMETER InputObject
Any PSOBJECT or other Table
.PARAMETER Subject
The Subject of the email
.PARAMETER To
The To field is who receives the email
.PARAMETER From
The From address of the email
.PARAMETER CSS
This is the Cascading Style Sheet that will be used to Style the table
.PARAMETER SmtpServer
The SMTP relay server
.EXAMPLE
PS C:\> Send-HtmlEmail -InputObject (Get-process *vmware* | select CPU, WS) -Subject "This is a process report"
An example to send some process information to email recipient
.NOTES
NAME : Send-HtmlEmail
VERSION : 1.1.0
LAST UPDATED: 01/03/2013
AUTHOR : Milo
.INPUTS
None
.OUTPUTS
None
#>
function Send-HTMLEmail {
#Requires -Version 2.0
[CmdletBinding()]
Param
([Parameter(Mandatory=$True,
Position = 0,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true,
HelpMessage="Please enter the Inputobject")]
$InputObject,
[Parameter(Mandatory=$True,
Position = 1,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true,
HelpMessage="Please enter the Subject")]
[String]$Subject,
[Parameter(Mandatory=$False,
Position = 2,
HelpMessage="Please enter the To address")]
[String[]]$To = "[email protected]",
[String]$From = "[email protected]",
[String]$CSS,
[String]$SmtpServer ="smtp.klick.com"
)#End Param
if (!$CSS)
{
$CSS = @"
<style type="text/css">
table {
font-family: Verdana;
border-style: dashed;
border-width: 1px;
border-color: #FF6600;
padding: 5px;
background-color: #FFFFCC;
table-layout: auto;
text-align: center;
font-size: 8pt;
}
table th {
border-bottom-style: solid;
border-bottom-width: 1px;
font: bold
}
table td {
border-top-style: solid;
border-top-width: 1px;
}
.style1 {
font-family: Courier New, Courier, monospace;
font-weight:bold;
font-size:small;
}
</style>
"@
}#End if
$HTMLDetails = @{
Title = $Subject
Head = $CSS
}
$Splat = @{
To =$To
Body ="$($InputObject | ConvertTo-Html @HTMLDetails)"
Subject =$Subject
SmtpServer =$SmtpServer
From =$From
BodyAsHtml =$True
}
Send-MailMessage @Splat
}#Send-HTMLEmail
#Defines variables
$url = "https://protect.cylance.com/Reports/ThreatDataReportV1/threats/BE5ABB1717DB46978BED0AF14A308557"
$output = "$PWD\ThreatsDataReport.csv"
(New-Object System.Net.WebClient).DownloadFile($url, $output)
#Downloads the CSV from $url and saves it to $output
$csv = Import-Csv $output | Select "File Name",DeviceName | ConvertTo-Html
Send-HTMLEmail -InputObject ($csv) -Subject "Cylance: Weekly Summary"
オリジナルコード
$url = "foo.com/directlinktocsv"
$output = "$PSScriptRoot\ThreatsDataReport.csv"
$emailSMTPServer = "smtp.mydomain.com"
$emailFrom = "[email protected]"
$emailRecipients = @("Foo <[email protected]>", "Bar <[email protected]>")
$emailSubject = "Cylance Detected Threats"
$emailBody = "This is where I want my output to go"
(New-Object System.Net.WebClient).DownloadFile($url, $output)
$csv = Import-Csv $output
$csv."File Name" | ForEach-Object {
$_
}
$csv.DeviceName | ForEach-Object {
$_
}
Send-MailMessage -From $emailFrom -To $emailRecipients -SmtpServer $emailSMTPServer -subject $emailSubject -Body $emailBody
ああがあり、これらは一般的に出力されたデータの価値は数十の列を持ってしようとしています。 CSVから最初の行を取得するだけでは、このトリックはできません。 私はHTMLに変換して本文に直接渡す必要があるかもしれないと思います。 – TheIronRose
@TheIronRose更新された回答を参照してください。 –
e:これを主な回答に含めて、心配しないでください – TheIronRose