PowerShell - 希望在{work}天的某个时间自动运行.ps1,然后收到包含输出的电子邮件


0

让我们开始学习PowerShell。所以,我正在监控公司所有服务器上的驱动器空间,我想自动化这个过程。这就是我得到的

$disk = Get-WmiObject Win32_LogicalDisk -Filter "DeviceID='C:'" | Select-Object Size, FreeSpace

Write-Host ("{0}GB total" -f [math]::truncate($disk.Size / 1GB))
Write-Host ("{0}GB free on C: OS" -f [math]::truncate($disk.FreeSpace / 1GB))

我希望每隔{星期}上午9点运行(如果可能的话),然后收到一封包含.ps1输出的电子邮件。

有人能指出我正确的方向吗?


1
我之前使用任务计划程序完成了这项工作。只需打开程序,右键单击“任务计划程序(本地)” - 创建任务..从这里你可以做任何你想做的事情。如果您想要发送邮件,可以转到操作 - 新建 - 发送电子邮件。如果这是你正在寻找的那么请告诉我,我会把它写成答案:)
Bungicasse

我知道有一个电子邮件选项,但我如何制作PowerShell输出 是这个 在那封电子邮件中,我正在努力理解并使其发挥作用。
ModestN

这是解决方案的另一部分,我无法回答,所以这里有一些有用的链接: 链接 链接
Bungicasse

Answers:


0

此脚本已准备就绪,只需进行少量更改即可。您需要确保在名为的文件中有一个服务器列表 servers.txt 这是在代码顶部解释的。该列表应如下所示:

CompanyDC
CompanyFileServer
CompanyExchange
CompanyRandomServer

由于wmi调用,此脚本还必须作为域管理员运行。该 $cred 第1行的变量将建立该变量,并在每次运行脚本时通过UAC窗口请求密码。

#SMTP Deets 部分已经在使用免费中继服务器。您所要做的就是化妆a来自地址,然后输入地址作为您希望报告发送到的电子邮件。

我已经编写了表格,以便在电子邮件通过时,服务器也将根据剩余的磁盘空间量以绿色/黄色/红色进行颜色编码。门槛是:绿色> 20%左||橙色11%-20%||红色0%-10%。

以下是电子邮件的示例:

enter image description here

编辑 $cred$ServerName 目录(参见上面的示例txt文件), $smtpFrom$smtpTo 而你很高兴。

$cred = Get-Credential -Credential 'domain\user'
$ServerName = Get-Content "C:\temp\servers.txt"
$ConvertToGB = (1024 * 1024 * 1024)
$enter1 = "`r"
$enter2 = "`r`n"

# Smtp deets
$smtpServer = "relay.appriver.com"
$smtpPort = "2525"
$smtpFrom = "reporting@yourcompany.com"
$smtpTo = "MyEmail@company.com"
$messageSubject = "Daily Server Report"

# Set up an SmtpClient
$smtpClient = New-Object Net.Mail.SmtpClient
$smtpClient.Host = $smtpServer
$smtpClient.Port = $smtpPort

# Create the MailMessage 
$mailMessage = New-Object Net.Mail.MailMessage
$mailMessage.From = $smtpFrom
$mailMessage.To.Add($smtpTo)
$mailMessage.Subject = $messageSubject
$mailMessage.IsBodyHtml = $true

# style
$htmlReport += "<style>"
$htmlReport += "BODY{background-color:white;}"
$htmlReport += "TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}"
$htmlReport += "TH{border-width: 1px;padding: 0px;border-style: solid;border-color: black;}"
$htmlReport += "TD{border-width: 1px;padding: 0px;border-style: solid;border-color: black;}"
$htmlReport += "</style>"


# table
$htmlReport += "<table>"
$htmlReport += "`n"
$htmlReport += "<tr>"
$htmlReport += "<th>ServerName</th>"
$htmlReport += "<th>Total Space</th>"
$htmlReport += "<th>Free Space</th>"
$htmlReport += "<th>Percent Free</th>"
$htmlReport += "</tr>"
foreach($Server in $ServerName)
{
    $disk = Get-WmiObject -Credential $cred Win32_LogicalDisk -ComputerName $Server -Filter "DeviceID='C:'" | Select-Object Size,FreeSpace
    $htmlReport += "<tr>"
    $htmlReport += "<td>$($Server)</td>"
    $htmlReport += "<td>$([Math]::Truncate($disk.Size / $ConvertToGB))  GB </td>"
    $htmlReport += "<td>$([Math]::Truncate($disk.FreeSpace / $ConvertToGB))  GB </td>"
    if([Math]::Truncate(($disk.FreeSpace / $disk.size) * 100) -le 10)
    {
        $htmlReport += "<td><font color=red> $([Math]::Truncate(($disk.FreeSpace / $disk.size) * 100))  % </font></td>"
    }
    if([Math]::Truncate(($disk.FreeSpace / $disk.size) * 100) -gt 10 -and [Math]::Truncate(($disk.FreeSpace / $disk.size) * 100) -le 20)
    {
        $htmlReport += "<td><font color=orange> $([Math]::Truncate(($disk.FreeSpace / $disk.size) * 100))  % </font></td>"
    }
    if([Math]::Truncate(($disk.FreeSpace / $disk.size) * 100) -gt 20)
    {
        $htmlReport += "<td><font color=green> $([Math]::Truncate(($disk.FreeSpace / $disk.size) * 100))  % </font></td>"
    }
    $htmlReport += "</tr>"
}

$htmlReport += "</table>"



# Now create an AlternateView from the HTML contents
$messageBody = [Net.Mail.AlternateView]::CreateAlternateViewFromString($htmlReport, 'text/html')

# Add the HTML view to the MailMessage
$mailMessage.AlternateViews.Add($messageBody)

# And finally send the message
$smtpClient.Send($mailMessage)
pause

编辑 - 然后在可靠的机器上使用任务调度程序,该机器始终在上午9点开启以设置此ps1运行。 “任务计划程序&gt;创建基本任务&gt;名称任务&gt;选择每日作为开始&gt;行动:每隔1天重复一次@ xx你设置的时间&gt;启动程序&gt;浏览你的ps1&gt;完成。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.