現在、私の目標は、URL から脅威データを含む CSV をダウンロードし、CSV のヘッダーであるファイル名とデバイス名の 2 つの列を取得することです。次に、そのデータを電子メールの 1 行にエクスポートして、セキュリティ チームの 2 人のメンバーに送信し、平文形式でレビューしてもらいたいと考えています。目標は、CSV には多くの無関係なデータがあるため、CSV から直接ダウンロードしてコピー ペーストする必要がないようにすることです。
これは非常に単純なスクリプトなので、すべて正常に動作します。私の質問は、csv から 2 列のデータを取得してメール本文に書き込むにはどうすればよいですか? 理想的には、ある種のテーブルで、2 つの列が整列するようにします。
オンラインでいくつかのリソースを見つけました。特に、PowerShell インターフェイスから任意のオブジェクトを取得し、オブジェクト (テーブル) を HTML に変換してから電子メールで送信するスクリプト: https://gallery.technet.microsoft.com/scriptcenter/ bd0c8d87-466f-4488-92a2-0f726cb6f4cd
これはまさに私がやりたいことなので、これは完璧です。CSVからpowershell関数にデータを適切に渡す方法がよくわかりません。
これは、powershell での私の最初のプロジェクトでもあることに注意してください。ほとんどの場合、technet のドキュメントと、オンラインで見つけたコード例のスクラップを組み合わせたものです。私はジュニア システム管理者なので、プログラミングのバックグラウンドはあまりありません。
ありがとうございます!
更新 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 = "smurphy@klick.com",
[String]$From = "cylancereporting@klick.com",
[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 = "myemail@mydomain.com"
$emailRecipients = @("Foo <foo@mydomain.com>", "Bar <bar@mydomain.com>")
$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