PowerShell - deseja executar automaticamente um .ps1 em um determinado horário de {work} dia e, em seguida, receber um e-mail com a saída

0

Vamos começar com isso, só agora estou aprendendo o PowerShell. Então, estou monitorando o espaço da unidade em todos os servidores da nossa empresa e gostaria de automatizar o processo. Isso é o que eu consegui

$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))

Eu gostaria que isso acontecesse às 9h da manhã a cada {week} dia (se possível) e, em seguida, recebesse um e-mail com a saída do .ps1.

Alguém pode me indicar a direção certa?

    
por ModestN 25.08.2016 / 11:16

1 resposta

0

Este script está pronto para ser feito com alterações mínimas. Você precisa ter certeza de que tem uma lista de servidores em um arquivo chamado servers.txt , explicado na parte superior do código. A lista deve se parecer com o seguinte:

CompanyDC
CompanyFileServer
CompanyExchange
CompanyRandomServer

Este script também tem que ser executado como um administrador de domínio por causa das chamadas wmi. A variável $cred na linha 1 estabelecerá isso e solicitará a senha por meio de uma janela do UAC toda vez que o script for executado.

A seção #SMTP Deets já está usando um servidor de retransmissão gratuito. Tudo o que você precisa fazer é criar um endereço no endereço e, em seguida, inserir o endereço como o e-mail para o qual o relatório será enviado.

Escrevi a tabela para que, quando o email chegar, os servidores também sejam codificados por cores verde / amarelo / vermelho com base na quantidade de espaço em disco restante. Os limites são: Verde > 20% restantes || Laranja 11% -20% || Vermelho 0% -10%.

Aqui está um exemplo de como o e-mail será:

Editeodiretório$cred,$ServerName(consulteoarquivotxtdeamostraacima),$smtpFrome$smtpToepronto.

$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 = "[email protected]"
$smtpTo = "[email protected]"
$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

Editar - Em seguida, use o agendador de tarefas em uma máquina confiável que esteja sempre ativada às 9h para configurar esse ps1 para ser executado. "Agendador de Tarefas > Criar Tarefa Básica > Nome da Tarefa > Escolha Diariamente como o início > ACÇÃO: Repetir a cada 1 dia @ xx tempo que você definir > Iniciar um programa > navegar pelo seu fim ps1 & gt ;.

    
por 25.08.2016 / 16:52