É mais preciso usar a propriedade Capacidade do Win32_PhysicalMemory do WMI, em vez de usar a propriedade TotalPhysicalMemory de Win32_ComputerSystem . Dito isto ...
Para alertar os usuários, você provavelmente desejaria algum tipo de mensagem pop-up. O VBScript abaixo pode ser usado como um script de login do usuário, no GPO do seu domínio ou usando o editor de Diretiva de Grupo local ( gpedit.msc
). O script deve ser salvo com uma extensão .vbs
.
Option Explicit
Const TargetGBMemory = 4
Dim wmi
Dim physicalMemory
Dim mem
Dim resultsReturned
Dim totalMem
Set wmi = GetObject("winmgmts:\root\cimv2")
Set physicalMemory = wmi.ExecQuery ("SELECT Capacity FROM Win32_PhysicalMemory")
resultsReturned = False
On Error Resume Next
Err.Clear
mem = physicalMemory.Count
resultsReturned = CBool(Err.Number = 0)
Err.Clear
On Error Goto 0
totalMem = 0
If resultsReturned Then
For Each mem In physicalMemory
If Not IsNull(mem.Capacity) Then
totalMem = CDbl(mem.Capacity)
End If
Next
End If
Set physicalMemory = Nothing
Set wmi = Nothing
If ((totalMem / (2 ^ 30)) < TargetGBMemory) Then
WScript.Echo "Something happened to your memory. You only have", FormatNumber(totalMem / (2 ^ 30)), "GB."
End If
Para a ideia do arquivo de log, você provavelmente não deseja nenhum pop-up. Basta escrever no arquivo e ficar quieto. Você pode usar o script abaixo da mesma maneira, mas deseja usá-lo como um script de inicialização de máquina no domínio ou na Diretiva de Grupo local. O script grava um arquivo chamado "memory_log.txt"
na pasta System. Por padrão, essa área é gravável apenas por administradores. Os usuários poderiam ver o arquivo de log e lê-lo, mas não poderiam apagá-lo ou modificá-lo. O script deve ser salvo com uma extensão .wsf
.
<package>
<job>
<object id="fso" progid="Scripting.FileSystemObject" />
<reference object="Scripting.FileSystemObject" />
<script language="VBScript">
Option Explicit
Const TargetGBMemory = 4
Dim wmi
Dim physicalMemory
Dim mem
Dim resultsReturned
Dim totalMem
Set wmi = GetObject("winmgmts:\root\cimv2")
Set physicalMemory = wmi.ExecQuery ("SELECT Capacity FROM Win32_PhysicalMemory")
resultsReturned = False
On Error Resume Next
Err.Clear
mem = physicalMemory.Count
resultsReturned = CBool(Err.Number = 0)
Err.Clear
On Error Goto 0
totalMem = 0
If resultsReturned Then
For Each mem In physicalMemory
If Not IsNull(mem.Capacity) Then
totalMem = CDbl(mem.Capacity)
End If
Next
End If
Set physicalMemory = Nothing
Set wmi = Nothing
If ((totalMem / (2 ^ 30)) < TargetGBMemory) Then
Dim ts
Set ts = fso.OpenTextFile (fso.BuildPath (fso.GetSpecialFolder(SystemFolder), "memory_log.txt"), ForAppending, True)
ts.Write Now
ts.Write vbTab
ts.WriteLine "Something happened to your memory. You only have " & FormatNumber(totalMem / (2 ^ 30)) & " GB."
ts.Close
Set ts = Nothing
End If
</script>
</job>
</package>