Отредактировал мой вопрос, чтобы попытаться сделать его более понятным - версия 2: -)
У меня есть следующий код в дисковом модуле внутри функции, которая использует Get-WmiObject, который помещает данные в строка $ LogMsg, которая затем используется intern в функции LogToEmail, которая находится в другом модуле (LogToEmail "Недостаточно места на диске" $ LogMsg;)
if ($AlertPercent -gt 0)
{
$filter = "DeviceID='" + $DriveLetter + "'";
$body = (Get-WmiObject -Class Win32_LogicalDisk -ComputerName $ServerName -Filter $filter |
Where-Object {$_.DriveType -eq 3 -and ((($_.FreeSpace/$_.Size*100) -as [float]) -lt $AlertPercent)} |
Sort-Object -Property Name |
Select-Object @{"Label"="Server";"Expression"={"{0:N}" -f ($_.SystemName)}},
Name,
VolumeName,
FileSystem,
Description,
VolumeDirty,
@{"Label"="DiskSize(GB)";"Expression"={"{0:N}" -f ($_.Size/1GB) -as [float]}},
@{"Label"="FreeSpace(GB)";"Expression"={"{0:N}" -f ($_.FreeSpace/1GB) -as [float]}},
@{"Label"="%Free";"Expression"={"{0:N}" -f ($_.FreeSpace/$_.Size*100) -as [float]}} |
Format-Table -AutoSize | Out-String);
}
else
{
$filter = "DeviceID='" + $DriveLetter + "'";
$body = (Get-WmiObject -Class Win32_LogicalDisk -ComputerName $ServerName -Filter $filter |
Where-Object {$_.DriveType -eq 3} |
Sort-Object -Property Name |
Select-Object @{"Label"="Server";"Expression"={"{0:N}" -f ($_.SystemName)}},
Name,
VolumeName,
FileSystem,
Description,
VolumeDirty,
@{"Label"="DiskSize(GB)";"Expression"={"{0:N}" -f ($_.Size/1GB) -as [float]}},
@{"Label"="FreeSpace(GB)";"Expression"={"{0:N}" -f ($_.FreeSpace/1GB) -as [float]}},
@{"Label"="%Free";"Expression"={"{0:N}" -f ($_.FreeSpace/$_.Size*100) -as [float]}} |
Format-Table -AutoSize | Out-String);
}
if ($body.Length -gt 0)
{
#Set the log message
$LogMsg = "The following drive '" + $pDriveLetter + "', on server '" + $ServerName + "', is low on space.`n" + $body.Trim();
#Log the stopped service(s) to the log file
LogToFile $LogMsg;
#Log the stopped service(s) to the host screen
LogToHost $LogMsg;
#Log the stopped service(s) to the email receipient
LogToEmail "Drive space is low" $LogMsg;
}
#Set log information message
$LogInfoMsg = "Ended checking drive space on server:" + $ServerName;
#Log the date and time started checking searched service(s) on the server
LogToFile $LogInfoMsg
#Log the date and time started checking searched service(s) on the server
LogToHost $LogInfoMsg
}
catch
{
#write out the error into a string format
$LogMsg = "- ERROR: " + ($_.Exception.ErrorRecord | Out-String);
#Log the error message to the log file
LogToFile $LogMsg;
#Log the error message to the host screen
LogToHost $LogMsg;
#Log, the error message to the email recipient
LogToEmail ("PowerShell error on " + (split-path $MyInvocation.PSCommandPath -leaf)) $LogMsg;
}
$ LogMsg затем передается в модуль журнала как
$Message = New-MimeMessage $global:EmailFrom $global:EmailTo $Subject $LogMsg $global:EmailCC
, а затем в модуль электронной почты как $ Body в качестве строкового параметра в функции New-MimeMessage, которая должна преобразовать его в HTML с помощью функции ConvertTo- HTML.
$BodyAsHtml = $global:BodyAsHTML
if ($BodyAsHtml)
{
$TextPart = New-Object MimeKit.TextPart("html")
#$RetConstructedMessage = $true
}
else
{
$TextPart = New-Object MimeKit.TextPart("plain")
}
$Header = "
<style>
DIV {font-family:'courier', monospace}
</style>
"
$BodyHTML = ConvertTo-Html -Head $Header -Body $Body | Out-String
$TextPart.Text = $BodyHTML
Однако ConvertTo- Html не кодирует новую строку / возврат каретки, хотя отладчик в Visual Studio Code, кажется, отображается правильно, но через браузер в GMail или Microsoft Outlook после отправки электронной почты , он отображается как сплошной однострочный. Я не использую код HTML для принудительного переноса строк там, где мне нужно, поскольку Get-WmiObject должен иметь их, поскольку обычный текст помещает новые строки и / или символы возврата каретки. Я включил изображения, чтобы попытаться улучшить то, что я вижу.
Наведение на $ Body HTML строковая переменная в отладчике Visual Studio Code
Просмотр электронной почты в браузере в GMail
Просмотр электронной почты в браузере Microsoft Outlook