Это более правильно использовать 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>