CSVからの特定のHashable値のみを印刷する最良の方法を理解したいと思います。 CSVからのHashTableのPowershell GetEnumerator
CSV
はそうのようにフォーマットされていますTicket,Last Updated,Priority,Assigned To,Email
2329,1-12-2017,Medium,Assignee1,[email protected]
2417,5-23-2016,Low,Assignee1,[email protected]
2416,4-20-2017,Medium,Assignee2,[email protected]
2463,8-9-2016,Medium,Assignee2,[email protected]
2481,3-4-2017,Low,Assignee3,[email protected]
2499,2-22-2017,Medium,Assignee4,[email protected]
2500,12-20-2016,High,Assignee5,[email protected]
2498,11-30-2016,Medium,Assignee5,[email protected]
を完璧な世界では仮定が、私は(これはなく、ネストされたハッシュテーブル値)CSVヘッダを知らないだろうということです。次のコードで示すようにハッシュテーブルを作成するためにループします。
これは問題なく動作します。問題は、完成した結果からEmail
の値を除外したいということです。だから私は理想的ではないが、私はこのCSVの列ヘッダが常にあることを行っているか知っている、ことを考え出したので、この作品がする?:
$import = Import-Csv -Path .\import.csv|
Group-Object -Property Email -AsHashTable
foreach ($i in $import.GetEnumerator()){
$html = $($i.Value.'Ticket') + $($i.Value.'Last Updated') + $($i.Value.'Priority') + $($i.Value.'Assigned To')
$html | Write-Host
}
あなたは上記のコードはまだGroup-Object
を使用して見ることができます
Email
プロパティに対しては出力されません。しかし、第二に私は| ConvertTo-Html -Head $htmlformat -Body $bodyformat
を追加します。すべてのデータは値の文字列の文字カウントを表す数字に変換されます。 PowerShellのシンプトンであるConvertTo-Html
の文字列値の問題について多くのことを読んだ後も、私はまだ悩んでいます。合計で
:なぜ最初
- (私が望むすべてのものを含めている現在のコードとは異なり)Hashtableの値を除外するコードを取得するにはいいだろう
- は、より良い、理解します上記の例では `` ConvertTo-Html`を問題なく使うことができますが、2番目は問題ありません。
ありがとうございます。
:現在、この全体につまずく誰のための$htmlformat = '<title>Stale Tickets</title>'
$htmlformat += '<style type="text/css">'
$htmlformat += "TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}"
$htmlformat += "TH{border-width: 1px;padding: 7px;border-style: solid;border-color: black;background-color:thistle}"
$htmlformat += "TD{border-width: 1px;padding: 7px;border-style: solid;border-color: black;background-color:#ffffcc}"
$htmlformat += '</style>'
$bodyformat = '<h3></h3>'
$notice = "<font color='red'><b>This is an automated message.</b></font><br />"
$FromAddress = "Spiceworks <[email protected]>"
$ToAddress = "<My email address for now>"
$Subject = "You have stale tickets!"
$SMTPserver = "smtp.whatever.com"
if ((Get-Item "spiceworks_stale_open_ticket_alert.csv").length -gt 0kb)
{
$html = Import-Csv -Path .\spiceworks_stale_open_ticket_alert.csv|
Group-Object -Property Email | ForEach-Object {
$_.Group | Select-Object * -Exclude 'Email','Assigned To' | ConvertTo-Html -Head $htmlformat -Body $bodyformat
$html = $html -replace "<","<" -replace """,'"' -replace ">",">"
$body = $notice + $html
Send-MailMessage -from $FromAddress -to $ToAddress -subject $Subject -bodyashtml ($body | Out-String) -priority High -smtpServer $SMTPserver
}
}
else {exit;}
最終的な作業の繰り返し以下コナーへのコメントに記載されている問題を持っている
:
は、完全なスクリプトを更新しました
if ((Get-Item "import.csv").length -gt 0kb) { Import-Csv -Path .\import.csv| Group-Object -Property Email| ForEach-Object { $Html = $_.Group | Select-Object * -Exclude 'Email','Assigned To' | ConvertTo-Html -Head $HtmlFormat -Body $BodyFormat $Html = $Html -replace "<","<" -replace """,'"' -replace ">",">" $Body = $notice + $Html + $notice2 $Subject = "Inactive Tickets for " + $_.Group[0].'Assigned To' $ToAddress = $_.Name Send-MailMessage -from $FromAddress -to $ToAddress -subject $Subject -BodyAsHtml ($Body | Out-String) -Priority High -SmtpServer $SMTPServer } } else {exit;}
あなたの説明については、まず感謝し、すべての意味を理解し始めていると私はそのために近づいている。私はあなたの提案を取って最新の反復でオリジナルの投稿を編集しました。うまくいけば、それはもう少し範囲を提供するでしょう。 'Select-Object * -Exclude 'Email''を使うあなたの提案は完璧に機能しました。ただし、譲受人が自分のチケットのみの書式付きテーブルを取得する代わりに、すべての譲受人が全員のチケットの複数のテーブルを取得しています。また、最終的には、すべてのループで '$ ToAddress'に' $ _。Group.Email'を使用する必要があります。 –
@NickB私は、各グループの結果をグループ化された 'Email'に電子メールで送信するスニペットを追加しました。 – ConnorLSW
は完璧に感謝しました。後世の最後のスクリプトを追加しました。 –