#!/usr/bin/perl
#
# c1zc0-winInfo.pl - by Michael Smith aka rotor
# Description: Display a little sysinfo on windows
# http://st0rage.org | r0t0r @st0rage.org
# irc.efnet.org @ #c1zc0
#
use strict;
use warnings;
use Getopt::Std;
use Win32;
use Win32::SystemInfo;
use Win32::DriveInfo;
my(%args,$time);
getopts("mpbl:d:", \%args);
# if log option specified open logfile or die
if($args{l}){
my $logPath = $args{l}; # path to logfile
open(LOGFILE,">$logPath") # open path to logfile or die
or die "Couldnt open $logPath for writing run without -l option or specify new logfile\n";
}
# die unless atleast option -b (basic sysinfo) is specified
if($args{b}){ &basic; } else { &usage; }
# if -p (processor info) specified goto processor()
if($args{p}){ &processor; }
# if -m ( memory info ) specified goto memory()
if($args{m}){ &memory; }
# if -d ( HDD drive info ) specified goto driveinfo()
if($args{d}){ &driveinfo; }
# driveinfo() - subroutine for disk drive information
sub driveinfo()
{
if($args{d} eq " "){
print("You didnt specify a drive letter to check usage on eg ( c ) or ( c: )\n");
print("Can only print drive letters\n");
print("Drives in use:\n");
if($args{l}){
print(LOGFILE "You didnt specify a drive letter to check usage on eg ( c ) or ( c: )\n");
print(LOGFILE "Can only print drive letters\n");
print(LOGFILE "Drives in use:\n");
}
my @drives = Win32::DriveInfo::DrivesInUse();
foreach my $ref (@drives){
print("Drive Letter: $ref\n");
if($args{l}){
print(LOGFILE "Drive Letter: $ref\n");
}
}
} else {
print("Disk information for: " . $args{d} . "\n");
}
}
# memory() - subroutine for memory information
sub memory()
{
my(%memInfo);
# MB = megabytes change to KB for kilobytes and GB for KB
if(Win32::SystemInfo::MemoryStatus(%memInfo, "MB"))
{
# if logfile option specified print to logfile
if($args{l}){
print(LOGFILE "\nMemory Information\n");
print(LOGFILE "------------------\n");
print(LOGFILE "Total Physical Memory: " . $memInfo{TotalPhys} . "\n");
print(LOGFILE "Available Memory: " . $memInfo{AvailPhys} . "\n");
print(LOGFILE "Memory Load: " . $memInfo{MemLoad} . "\n");
print(LOGFILE "Size of page (swap) file: " . $memInfo{TotalPage} . "\n");
print(LOGFILE "Total virtual memory: " . $memInfo{TotalVirtual} . "\n");
print(LOGFILE "Available virtual memory " . $memInfo{AvailVirtual} . "\n");
}
print("\nMemory Information\n");
print("------------------\n");
print("NOTE: THIS IS IN MEGABYTES\n");
print("Total Physical Memory: " . $memInfo{TotalPhys} . "\n");
print("Available Memory: " . $memInfo{AvailPhys} . "\n");
print("Memory Load: " . $memInfo{MemLoad} . "\n");
print("Size of page (swap) file: " . $memInfo{TotalPage} . "\n");
print("Total virtual memory: " . $memInfo{TotalVirtual} . "\n");
print("Available virtual memory " . $memInfo{AvailVirtual} . "\n");
} else {
print("Cant get memory information?");
}
}
#processor() - subroutine for processor info
sub processor()
{
my %procInfo;
if(Win32::SystemInfo::ProcessorInfo(%procInfo))
{
# check number of processors then print each processer ( if dual ) and their speed
for(my $i = 0; $i <$procInfo{NumProcessors}; $i++){
# if log option specified print to logfile
if($args{l}){
print(LOGFILE "\nProcessor Information\n");
print(LOGFILE "---------------------\n");
# print speed of processor
print(LOGFILE "Speed of processor $i: " . $procInfo{"Processor$i"}{MHZ} . "MHz\n");
# identifier for thr processor as found in registry
print(LOGFILE "Identifier of processor $i: " . $procInfo{"Processor$i"}{Identifier} . "\n");
# vendor name of identifier
print(LOGFILE "Vendor identifier of processor: $i" . $procInfo{"Processor$i"}{VendorIdentifier} . "\n");
# the name of the processor
print(LOGFILE "Processor Name of processor: $i" . $procInfo{"Processor$i"}{ProcessorName} . "\n");
}
print("\nProcessor Information\n");
print("---------------------\n");
print("Speed of processor $i: " . $procInfo{"Processor$i"}{MHZ} . "MHz\n");
print("Identifier of processor $i: " . $procInfo{"Processor$i"}{Identifier} . "\n");
print("Vendor identifier of processor: $i" . $procInfo{"Processor$i"}{VendorIdentifier} . "\n");
print("Processor Name of processor: $i" . $procInfo{"Processor$i"}{ProcessorName} . "\n");
}
}
}
# basic() - subroutine for basic sysinfo
sub basic()
{
my $loginName = Win32::LoginName; # your login name
my $nodeName = Win32::NodeName; # computers node name
my $perlVer = Win32::BuildNumber; # active state build number
# name of microsoft Network domain that owner of process is logged into
my $domainName = Win32::DomainName;
my $fsType = Win32::FsType; # type of file system
# this is for time and date long but no fucking module worked
my @days=("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday");
my @months=("January","February","March","April","May","June","July","August","September","October","November","December");
my($seg,$min,$hora,$dia,$mes,$ano,$wday,$yday,$isdst)=gmtime(time());
my$year=$ano+1900;
if($min < 10) { $min="0".$min; }
if ($hora<12) { $min.=" AM"; }
my $time="$days[$wday-1], $months[$mes] $dia, $year at $hora:$min";
# if log option specified print output to logfile and then to screen
if($args{l}){
print(LOGFILE "c1zc0-winInfo - by Michael Smith aka rotor \n");
print(LOGFILE "Basic System Information\n");
print(LOGFILE "------------------------\n");
print(LOGFILE "Script run: $time\n");
print(LOGFILE "Active State Perl version: $perlVer\n");
print(LOGFILE "Node Name: $nodeName Login Name: $loginName\n");
print(LOGFILE "MS Domain name: $domainName FS Type: $fsType\n");
}
print("\nc1zc0-winInfo - by Michael Smith aka rotor \n");
print("Basic System Information\n");
print("------------------------\n");
print("Script run: $time \n");
print("Active State Perl version: $perlVer\n");
print("Node Name: $nodeName Login Name: $loginName\n");
print("MS Domain name: $domainName FS Type: $fsType\n");
}
sub usage()
{
print("\nc1zc0-winInfo - by Michael Smith aka rotor \n");
print("Description: displays some sysinfo on win32\n");
print("Usage: perl $0 -b -l [logfile] []\n");
exit;
}