Начнем с того, что я только сейчас изучаю 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 ответ1

0

Этот скрипт готов к работе с минимальными изменениями. Вы должны убедиться, что у вас есть список серверов в файле servers.txt который объясняется в верхней части кода. Список должен выглядеть следующим образом:

CompanyDC
CompanyFileServer
CompanyExchange
CompanyRandomServer

Этот скрипт также должен запускаться от имени администратора домена из-за вызовов wmi. Переменная $cred в строке 1 установит это и будет запрашивать пароль через окно UAC при каждом запуске сценария.

Раздел #SMTP Deets уже использует бесплатный сервер ретрансляции. Все, что вам нужно сделать, это составить адрес отправителя, а затем ввести адрес в качестве адреса электронной почты, на который вы хотите отправить отчет.

Я написал таблицу так, чтобы при получении электронной почты серверы также имели цветовую кодировку зеленый / желтый / красный в зависимости от количества свободного места на диске. Пороговые значения: зеленый> 20% осталось || Апельсин 11% -20% || Красный 0% -10%.

Вот пример того, как будет выглядеть электронная почта:

Отредактируйте каталог $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 для запуска. «Планировщик заданий> Создать основную задачу> Имя задачи> Выберите« Ежедневно »в качестве запуска> Действие: повторять каждый 1 день при установленном времени xx> Запустить программу> найдите свой ps1> завершить.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .