Existem aplicativos que montem a quantidade de memória física instalada?

0

Existe alguém familiarizado com um script que possa ser configurado para ser executado na inicialização que relatará o status da memória física instalada em uma máquina?

Eu tenho um estoque de laptops com Windows XP e estou lidando com o problema de roubo de RAM. Quando um usuário faz logon, eu gostaria que eles fossem alertados se a memória física for menor que um valor predefinido (4 GB). Ainda melhor seria se essa alteração fosse registrada em um arquivo de log acessível apenas por uma conta de administrador.

    
por Gundabad 05.04.2011 / 20:27

2 respostas

1

Existem comandos vbscript que retornam a quantidade de memória do sistema. Use isso para gravar em um texto ou arquivo de log e compará-lo com o valor anterior e retornar um erro se eles não corresponderem.

Veja aqui: link

Como ele retorna um inteiro para a memória do sistema, você pode até mesmo configurar um fator de fudge para minimizar erros falsos, digamos +/- 30.

Você também pode usar isso para atender às suas preferências de relatórios seguros, acrescentando o valor da memória, a data e a hora a um arquivo em uma pasta protegida e usando um script para pesquisar regularmente os laptops e informar onde os valores foram alterados e a data em que a alteração foi registrada. Isso permitirá que você veja quando a variação foi registrada pela primeira vez para permitir um melhor acompanhamento do problema.

UPDATE: O Sysinternals (agora de propriedade da MS) tem um utilitário, PSINFO, que relata vários valores de informações do sistema remotamente, semelhante ao script acima. Mas relata mais do que apenas memória. Faça com que ele seja executado e informe sobre a inicialização, nenhum script necessário no laptop. E, em seguida, você só precisaria escrever um script de coleta e análise de saída e verificaria vários valores de sistema para a variação.

    
por 05.04.2011 / 20:57
1

É 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>
    
por 06.04.2011 / 04:04