Quando a memória livre estiver abaixo de percentual passado ao script, vamos exibir um balão (ballontip) na área de notificação do windows.
Para montarmos esse script, vamos precisar do seguinte.
Obtermos a quantidade de memória livre disponível, em percentual:
$Sistema = Get-Ciminstance Win32_OperatingSystem $PercMemLivre = [math]::Round(($Sistema.FreePhysicalMemory/` $Sistema.TotalVisibleMemorySize)*100,2)
Uma função que exiba um balão na área de notificação quando a memória livre estiver abaixo de um valor (em percentual) que especificarmos.
Function _ShowBalloon($PML) { $Notifica = New-Object System.Windows.Forms.NotifyIcon $Notifica.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon(` $PSScriptRoot + '\Img\Memory.ico') . . . $Notifica.ShowBalloonTip(10000) } ### _ShowBalloon
O script completo poderia ser esse:
Function MemMonitor { [CmdletBinding()] Param ( [Parameter(Mandatory=$true,` HelpMessage="Indica o tempo de monitoria da memória (em segundos). P.ex.: 60")] [ValidateRange(30,7200)] [Int]$TempoMonitoria, [Parameter(Mandatory=$true,` HelpMessage="Indica o percentual de memória livre mínima, aceitável como normal. P.ex.: 45")] [ValidateRange(20,80)] [Int]$PercMemMin ) Add-Type -AssemblyName System.Windows.Forms $HoraIni = Get-Date $Sistema = Get-Ciminstance Win32_OperatingSystem $isNotShowingBalloon = $true $HDif = 0 for ($t=1; $t -le 100000; $t++) { $HoraAgora = Get-Date $HoraDif = NEW-TIMESPAN –Start $HoraIni –End $HoraAgora $HDif += $HoraDif.Seconds Write-Host $HDif ' - ' $TempoMonitoria if ($HDif -ge $TempoMonitoria) { While ($isNotShowingBalloon -eq $false) { Start-Sleep -Seconds 1 } exit } $PercMemLivre = [math]::Round(($Sistema.FreePhysicalMemory/` $Sistema.TotalVisibleMemorySize)*100,2) if ($PercMemLivre -lt $PercMemMin) { if ($isNotShowingBalloon) { $isNotShowingBalloon = $false _ShowBalloon($PercMemLivre) $isNotShowingBalloon = $true } } else { $isNotShowingBalloon = $true } Start-Sleep -Seconds 10 } } Function _ShowBalloon($PML) { $Notifica = New-Object System.Windows.Forms.NotifyIcon $Notifica.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon(` $PSScriptRoot + '\Img\Memory.ico') if ($PML -gt 30) { $Notifica.BalloonTipIcon = 'Warning' } else { $Notifica.BalloonTipIcon = 'Error' } $Notifica.BalloonTipText = [string]$PML + ' %' $Notifica.BalloonTipTitle = 'Memória Livre [%]' $Notifica.Text = [string]$PML + ' %' $Notifica.Visible = $true $Notifica.ShowBalloonTip(10000) Start-Sleep -Seconds 10 $Notifica.Visible = $false $Notifica.Dispose() } ### _ShowBalloon if ($args.Length -lt 2) { MemMonitor } else { MemMonitor -TempoMonitoria $args[0] -PercMemMin $args[1] }
E o resultado da execução poderia ser, por exemplo.
Observe que foi utilizado um ícone para exibição na área de notificação.
O mesmo está referenciado na seguinte linha de código.
$Notifica.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon(` $PSScriptRoot + '\Img\Memory.ico')
Ainda, observe que é possível indicar um ícone para o balão (balloontip).
Nesse caso, estamos utilizando Warning quando a memória livre é maior do que 30, mas menor do que o valor especificado para monitorar.
E estamos utilizando Error para representar o ícone quando a memória livre, em percentual, for menor do que, ou igual a, 30.
if ($PML -gt 30) { $Notifica.BalloonTipIcon = 'Warning' } else { $Notifica.BalloonTipIcon = 'Error' }
Nenhum comentário:
Postar um comentário