Кто-нибудь знаком со сценарием, который можно настроить на запуск при запуске, который будет сообщать о состоянии физической памяти, установленной на компьютере?

У меня есть запас ноутбуков с Windows XP, и я занимаюсь проблемой кражи оперативной памяти. Когда пользователь входит в систему, я бы хотел, чтобы его предупредили, если объем физической памяти меньше предварительно установленного объема (4 ГБ). Еще лучше было бы, если бы это изменение было отмечено в файле журнала, доступном только для учетной записи администратора.

2 ответа2

1

Существуют команды vbscript, которые возвращают объем системной памяти. Используйте это, чтобы записать в текстовый файл или файл журнала и сравнить его с предыдущей суммой и вернуть ошибку, если они не совпадают.

Смотрите здесь:http://community.spiceworks.com/scripts/show/409-find-network-machine-system-name-and-installed-memory

Так как он возвращает целое число для системной памяти, вы можете даже установить коэффициент выдумки, чтобы минимизировать ложные ошибки, скажем +/- 30.

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

ОБНОВЛЕНИЕ: Sysinternals (в настоящее время принадлежит MS) имеет утилиту PSINFO, которая удаленно сообщает о различных значениях системной информации, аналогично приведенному выше сценарию. Но он сообщает больше, чем просто память. Запустите его и сообщите о запуске, на ноутбуке сценарий не требуется. И тогда вам понадобится только сценарий сбора и анализа выходных данных, и вы сможете проверить множество системных значений на наличие отклонений.

1

Это более правильно использовать Capacity свойство Win32_PhysicalMemory от WMI, а не использовать TotalPhysicalMemory свойство Win32_ComputerSystem. Что, как говорится...

Чтобы предупредить пользователей, вы, вероятно, захотите всплывающее сообщение. Сценарий VBScript, приведенный ниже, можно использовать в качестве сценария входа пользователя в систему, либо в GPO вашего домена, либо с помощью локального редактора групповой политики (gpedit.msc). Скрипт должен быть сохранен с расширением .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

Для идеи файла журнала вы, вероятно, не хотите всплывающих окон. Просто пиши в файл и молчи. Вы можете использовать приведенный ниже сценарий таким же образом, но вы бы хотели использовать его в качестве сценария запуска компьютера в домене или локальной групповой политике. Сценарий записывает файл с именем "memory_log.txt" в системную папку. По умолчанию эта область доступна для записи только администраторам. Пользователи смогут увидеть файл журнала и прочитать его, но не смогут удалить или изменить его. Сценарий должен быть сохранен с расширением .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>

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