Я пытаюсь написать PowerShell для создания отчетов о дисковом пространстве на всех моих серверах. Намерение состоит в том, чтобы запускать его как запланированное задание в полночь ежедневно, который будет экспортировать CSV, а также отправлять электронную почту, если место на рабочем месте составляет менее 10 процентов, электронное письмо будет содержать вложение самого последнего CSV report.
Проблема, с которой я столкнулся, - это электронная почта. Весь код ниже!
$OldReports = (Get-Date).AddDays(-30)
#edit the line below to the location you store your disk reports# It might also
#be stored on a local file system for example, D:\ServerStorageReport\DiskReport
$messageParameters = @{
Subject = "Weekly Server Storage Report"
Body = "Attached is Weekly Server Storage Report. The scipt has been amended to return only servers with free disk space less than or equal to 10%. All reports are located in \\universalexplorer.net\REPORTS\ServerStorageReports$Env:COMPUTERNAMEDiskReport\, but the most recent is sent weekly"
From = "<doNotReply@universalexplorer.net>"
To = "<jacob.pagano@universalexplorer.net>"
Attachments = (Get-ChildItem "\\universalexplorer.net\REPORTS\ServerStorageReports\DiskReport_$Env:COMPUTERNAME*" | sort LastWriteTime | select -last 1)
SmtpServer = "smarthost.universalexplorer.net"
}
Get-ChildItem "\\universalexplorer.net\REPORTS\ServerStorageReports\DiskReport_$Env:COMPUTERNAME*" | `
Where-Object { $_.LastWriteTime -le $OldReports} | `
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue
#Create variable for log date
$LogDate = get-date -f yyyyMMddhhmm
Get-WmiObject -Class Win32_logicaldisk -Filter "DriveType = '3'" |
Select-Object -Property DeviceID, DriveType, VolumeName,
@{Label = "Drive Letter";Expression = {$_.DeviceID}},
@{Label = "Total Capacity (GB)";Expression = {"{0:N1}" -f( $_.Size / 1gb)}},
@{Label = "Free Space (GB)";Expression = {"{0:N1}" -f ( $_.Freespace / 1gb ) }},
@{Label = 'Free Space (%)'; Expression = {"{0:P0}" -f ($_.freespace/$_.size)}} | Export-Csv -path "\\universalexplorer.net\REPORTS\ServerStorageReports\DiskReport_$Env:COMPUTERNAME'_'$logDate.csv" -NoTypeInformation
Get-WmiObject -Class Win32_logicaldisk -Filter "DriveType = '3'" | Send-MailMessage @messageParameters -BodyAsHtml | Where-Object {($_.freespace/$_.size) -le '0.1'}
А вот фрагмент для части электронной почты.
Get-WmiObject -Class Win32_logicaldisk -Filter "DriveType = '3'" | Send-MailMessage @messageParameters -BodyAsHtml | Where-Object {($_.freespace/$_.size) -le '0.1'}