Il comando wmic di Windows.
Al solito Wikipedia ci aiuto con la spiegazione del comando, e anche Microsoft non è da meno .
Dal mio punto di vista ho utilizzato questo comando per trovare il valore della RAM visibile al sistema operativo:
wmic os get freephysicalmemory /format:CSV
wmic os get totalvisiblememorysize /format:CSVPoi andandoci a lavorare all'interno di un classico script mi sono trovato la percentuale di RAM disponibile:
Ho incontrato qualche problema sul formato dell'output del comando e sulla proporzione.
for /f "skip=2 tokens=2 delims=," %%A in ('wmic os get freephysicalmemory /format:"%WINDIR%\System32\wbem\en-us\csv"') do set FREERAM=%%A
for /f "skip=2 tokens=2 delims=," %%A in ('wmic os get totalvisiblememorysize /format:"%WINDIR%\System32\wbem\en-us\csv"') do set TOTRAM=%%A
set /A PERCFREERAM=%FREERAM%/(%TOTRAM%/100)
Nel formato di output ho scelto CSV per avere l'outoput diviso da virgola e per poterlo poi lavorare comodamente nel ciclo FOR, se non avessi messo lo switch format mi avrebbe dato il risultato in formato tabellare, lasciando una riga vuota in coda che mi dava qualche problema, in formato test, invece mi metteva come separatore uguale (=) che dava fastidio come delims del comando FOR.
Trovato il formato che mi piace in alcuni server ricevevo l'errore
"invalid xsl format"Dopo essermi impazzito un pochino ho scoperto era legato ad un bug di Windows, in realtà qual CSV si riferisce ad un file chiamato csv.xsl che si può trovare in c:\windows\system32 o in una sua sottodirectory.
La soluzione, nel caso si ha questo errore è quella di cercarsi il file e poi referenziarlo direttamente nello switch /format: senza usarne l'estensione, un esempio è disponibile nel mio ciclo for.
Il secondo problema lo ho trovato nella proporzione con cui mi calcolo il valore percentuale della ram disponibile, A scuola mi avevano insegnato facendo:
(FRERAM*100)/TOTRAMSu un sistema con "troppa" RAM mi tornava un risultato sballato, dopo diverse ore di impazizmanto ho scoperto che FREERAM*100 creava un valore superiore ai 32 bit ( 2^32 ), il comando SET /A me lo troncava dandomi un risultato sbagliato.
Cambiando l'ordine dell'operazione (ringrazierò sempre la mia professoressa di matematica delle superiori) come da esempio ho rimpiccolito il mio numero e sono riuscito a fare l'operazione.
Nessun commento:
Posta un commento