REBOL [
Title: "Report the memory and other data from the computer info files"
Purpose: {Use a folder of files from the GatherComputerInfo
program and list some miscellaneous information about each computer,
including memory which is important information when planning
software upgrades.}
]
;; [---------------------------------------------------------------------------]
;; [ This program was suggested as a way to report the memory and other ]
;; [ important information about deployed computers. ]
;; [ It uses text files created at startup time by computers. ]
;; [ Each text file contains information that the computer gathered about ]
;; [ itself, Those files ]
;; [ were written into a common folder, and then all files in that folder ]
;; [ were processed by this program which extracted the information we want ]
;; [ to report. ]
;; [ The file is text in a REBOL-readable format, and the relevant items ]
;; [ look like this: ]
;; [ COMPUTERNAME: "IS-SWHITE7" ]
;; [ MANUFACTURER: "Hewlett-Packard" ]
;; [ MODEL: "HP EliteDesk 800 G1 SFF" ]
;; [ SERIALNO: "2UA52831RN" ]
;; [ MEMORY: "15.9085540771484" ]
;; [ LASTREBOOT: "06/27/2017 09:19:27" ]
;; [ DEFAULTBROWSER: "C:\Program Files\Internet Explorer\iexplore.exe" ]
;; [ ]
;; [ The program to create these files is on the COBOLREBOL free stuff area ]
;; [ and is called GatherComputerInfo.ps1. ]
;; [---------------------------------------------------------------------------]
;; [---------------------------------------------------------------------------]
;; [ Change these items for your own installation. ]
;; [---------------------------------------------------------------------------]
MR-FILENAME: %ComputerMemory.html ;; output report in html format
LOGDIR: %ComputerList ;; folder of computer info files
;; [---------------------------------------------------------------------------]
;; [ In a report file, there are several REBOL-readable data items. ]
;; [ The ones below are the ones we will report on. ]
;; [---------------------------------------------------------------------------]
MR-COMPUTER: ""
MR-MODEL: ""
MR-WINDOWS: ""
MR-MEMORY: ""
MR-ADOBE: ""
MR-BROWSER: ""
MR-BROWSERPATH: none
MR-BROWSERPARTS: []
MR-PAGE: ""
MR-CORRUPT-FILE-NAME: ""
;; [---------------------------------------------------------------------------]
;; [ In our first attempt (and this might still be true), powershell put ]
;; [ nulls in the list of monitors. So we will read the file as binary, ]
;; [ replace nulls with empty strings or spaces (whatever works), and then ]
;; [ load that instead of loading the file directly. ]
;; [---------------------------------------------------------------------------]
PHONEHOME-BINARY: ""
;; [---------------------------------------------------------------------------]
;; [ These are the html fragments we will use to produce a report. ]
;; [---------------------------------------------------------------------------]
MR-HTML-HEAD: {
Computer Memory Report
Computer memory report
Computer name |
Model |
Windows version |
Memory |
Adobe Version |
Default browser |
}
MR-HTML-FOOT: {
}
MR-HTML-ROW: {
<% MR-COMPUTER %> |
<% MR-MODEL %> |
<% MR-WINDOWS %> |
<% MR-MEMORY %> |
<% MR-ADOBE %> |
<% MR-BROWSER %> |
}
MR-HTML-CORRUPT: {
<% MR-COMPUTER %> |
<% rejoin ["Corrupt file " MR-CORRUPT-FILE-NAME] %> |
}
change-dir LOGDIR
FILE-LIST: read %.
append MR-PAGE MR-HTML-HEAD
append MR-PAGE newline
foreach PHONEHOME-FILE FILE-LIST [
MR-COMPUTER: copy ""
MR-BROWSER: copy ""
MR-BROWSERPATH: copy ""
MR-BROWSERPARTS: copy []
USERNAME: copy ""
LOGINDATE: copy ""
LOGINTEIME: copy ""
COMPUTERNAME: copy ""
MANUFACTURER: copy ""
MODEL: copy ""
SERIALNO: copy ""
LOGGEDIN: copy ""
OS: copy ""
MEMORY: copy ""
LASTREBOOT: copy ""
DEFAULTBROWSER: copy ""
INSTALLED-SOFTWARE: copy []
PHONEHOME-BINARY: copy ""
;; -- start of existence check
either exists? PHONEHOME-FILE [
;; -- the file exists
PHONEHOME-BINARY: to-string read/binary PHONEHOME-FILE
replace/all PHONEHOME-BINARY #{00} ""
either error? try [do load PHONEHOME-BINARY] [
;; -- the file is bad
MR-CORRUPT-FILE-NAME: to-string PHONEHOME-FILE
append MR-PAGE build-markup MR-HTML-CORRUPT
append MR-PAGE newline
] [
;; -- the file is loadable, but could be incomplete
MR-COMPUTER: COMPUTERNAME
either equal? MODEL "" [
MR-MODEL: " "
] [
MR-MODEL: MODEL
]
either equal? OS "" [
MR-WINDOWS: " "
] [
MR-WINDOWS: OS
]
either equal? MEMORY "" [
MR-MEMORY: " "
] [
MR-MEMORY: trim/all/with to-string to-money MEMORY "$" ;; cheap trick
]
either equal? DEFAULTBROWSER "" [
MR-BROWSER: " "
] [
MR-BROWSERPATH: to-rebol-file DEFAULTBROWSER
MR-BROWSERPARTS: split-path MR-BROWSERPATH
MR-BROWSER: copy second MR-BROWSERPARTS
]
MR-ADOBE: copy ""
MR-REMIT: copy ""
foreach [PKG VER] INSTALLED-SOFTWARE [
if find/any PKG "Adobe Acrobat*" [
append MR-ADOBE PKG
append MR-ADOBE rejoin [
", "
VER
" "
]
]
]
if equal? MR-ADOBE "" [
MR-ADOBE: " "
]
append MR-PAGE build-markup MR-HTML-ROW
append MR-PAGE newline
]
] [
;; -- the file does not exist
MR-MODEL: "unknown"
MR-WINDOWS: "unknown"
MR-MEMORY: "unknown"
MR-ADOBE: "unknown"
append MR-PAGE build-markup MR-HTML-ROW
append MR-PAGE newline
]
;; -- end of existence check
]
append MR-PAGE MR-HTML-FOOT
append MR-PAGE newline
write MR-FILENAME MR-PAGE
browse MR-FILENAME
;halt