我遇到了一个问题,即我检索了特定文件夹中的文件列表。工作良好!。我现在正试图在电子邮件正文中格式化它。 数据的第一列是好的,但第三个是文件大小(我想对齐它)不断出现问题。
我已经尝试了网上建议的许多不同的格式化选项,但似乎没有任何效果。
以下是该计划的主要部分:
#Get List of files in Rejected Folder
$files = (Get-ChildItem -Path $path -Recurse| Where-Object { !$_.PSIsContainer })
#Setup eMail properties
$From = "xxxxxx@yyyyyy.zzz"
$To = "bbbbbbbbb"
$Subject = "Files in TEST Reject Folder"
$SMTPServer = "mail.nswhealth.net"
$SMTPPort = "25"
#Setup the Body of the eMail which will include header and list of files in Rejected Folder
$Body = "Here is a list of the files: <p>"
$mailBody = "Filename `t`t`t`t`t`tCreationTime `t`t`t Size`r`n"
$mailBody += "------------ `t`t`t`t`t`t-----------------`t`t`t -----`r`n"
$Count = 0 #Initialise counter
#Get list of files and append into string with 1 file per line
foreach ($file in $files) {
$kb = ($([math]::Round($file.Length / 1kb)) -as [string]).ToString().Trim();
#$kb1 = $kb + "KB"
#$varLine1 = $file.Name + "`t" + $file.CreationTime + "{0,15}" -f $kb1 + "`r`n"
#Reformat Date
$varDate = $file.CreationTime
$varDate1 = $varDate.ToString("dd/MM/yyyy hh:mm tt")
#$varLine1 = $file.Name + "`t" + $varDate1 + "{0,15}" -f $kb + "`r`n"
#$varLine1 = $file.Name + "`t" + $varDate1 + "`t" + $kb + " KB" + "`r`n"
$varLine1 = "{0,-50} {1,2} {2,-19} {3,2} {4,15} {5,3} {6,4}" -f $file.Name, "`t", $varDate1, "`t", $kb, "KB", "`r`n"
$mailBody += $varLine1;
$Count++; #increment counter
}
#When complete list has been setup in body, add a total file counter to the end
$mailBody += "`r`nTotal Number of Files: " + $Count
#Send
$smtp = new-object Net.Mail.SmtpClient($SMTPServer)
$smtp.Send($From, $To, $Subject, $mailBody)
我已经附上了它看起来像的图片,不确定它是否显示好。但这里是模仿它的样子。正如你所看到的,前两列是可以的,但第三列总是略有不同(不能像我在电子邮件中那样模拟它)
文件名CreationTime大小
------------ ----------------- -----
000000AB0001.ref 10/11/2015 05:00 PM 86 KB
0113585H0000.ref 15/05/2015 03:10 PM 152 KB
0264621J0000.ref 15/05/2015 02:50 PM 125 KB
任何帮助将不胜感激 安德鲁
答案 0 :(得分:1)
我认为,您需要使用pre
标记将预先格式化的文本包含在电子邮件中:
$mailBody = -join @(
'Here is a list of the files: <p>'
'<pre>'
$files|Format-Table -AutoSize `
-Property @{Label='Filename';Expression='Name'},
@{Expression='CreationTime';Format='dd/MM/yyyy hh:mm tt'},
@{Label='Size';Expression={"$([math]::Round($_.Length / 1kb)) KB"};Alignment='right'} |
Out-String -Width ([int]::MaxValue)
'</pre>'
"Total Number of Files: $($files.Count)"
)
答案 1 :(得分:0)
您的格式正确(就间距而言)。如果您尝试使用等宽字体来查看您将看到的消息:
000000AB0001.ref 10/11/2015 05:00 PM 186 KB
因此,设置电子邮件客户端以使用等宽字体或使用电子邮件客户端cat了解的标记:HTML,BBCode等。 PetSerAl 给出了HTML电子邮件的一个很好的示例,其中使用Format-Table格式化正文cmdlet并放在pre
标记内。