我无法找到电子邮件中的行被任务计划程序触发时缩短的原因(当脚本从ISE手动执行时,行不会缩短!)。我想将FullName传递给电子邮件,并将其用作文档的链接(当路径和文件不包含空格时,链接效果很好)。
如果我使用“format-list”而不是“format-table”它看起来更好(即使由Task Scheduler触发)我必须添加参数“$ body = $ newdoc | Out-String -Width 255”防止断行 - 但文件名中的空格仍然会断开链接:
接下来就是FullName包含空格 - 我尝试了很多方法(比如$ variable.replace; $ var = $ var -replace“”,“`”等等)
#date and time formating
$culture = Get-Culture
$culture.DateTimeFormat.LongTimePattern = 'HH:mm'
$culture.DateTimeFormat.ShortDatePattern = 'dd-MM-yyyy'
Set-Culture $culture
#find files changed during last hour, sort descending
$newdoc = get-childitem -File -Path \\ottm09itoms01\OTA-IT_Operators\ -Recurse | ? {$_.LastWriteTime -gt (Get-Date).AddHours(-1)} | sort lastwritetime -Descending | Format-table -Property LastWriteTime, fullname
$body = $newdoc | Out-String
$enc = New-Object System.Text.utf8encoding
Send-MailMessage -From $sender -To $receiver2 -Subject "Documents updated" -body $body -Encoding $enc -SmtpServer $SMTPserver
答案 0 :(得分:1)
经过一番挖掘后,我怀疑问题是您使用Out-String
根据-width
参数截断输出,该参数未指定。引用the documentation:
-width
指定每行输出中的字符数。任何其他字符都会被截断,而不会被包装。如果省略此参数,则宽度由主机程序的特征决定。 Windows PowerShell控制台的默认值为80(字符)。
换句话说,当您在ISE Out-String
中运行此脚本时,可能会将宽度设置为ISE的缓冲区宽度,但是当任务计划程序运行它时,它使用默认的80个字符宽度。 / p>
所以基本上只需将-width 120
(或您选择的值)添加到Out-String
,看看是否能解决问题。
要修复空格上的链接,您可能需要使用-replace
为它们手动生成一些HTML。类似的东西:
$body = $body -replace '(\\\\.*[^\s])','<a href="$1">$1</a>'
$body = $body.trim() -replace "`n","<br>`n"
这假设您的所有路径都是UNC路径(即以\\
开头的路径)。然后,您需要在-BodyAsHtml
命令上抛出Send-MailMessage
。这是一种抛在一起的方式,我确信这可能是一种更好的做事方式,但它应工作。