NTDOC
Administrator
Registered: 2000-07-28
Posts: 11625
Loc: CA
Since there has been a bit of interest lately of getting System information into different formats lately I thought I'd post a variation on this script. This one does not gather the software information but simply puts in some of the user and hardware information. This is just an example which can be altered to easily fit what it is you're wanting to put into the file.Break On Dim $SO ,$File ,$Excel ,$Report $SO =SetOption ('Explicit' ,'On' )$SO =SetOption ('NoVarsInStrings' ,'On' )$SO =SetOption ('NoMacrosInStrings' ,'On' ) $Excel = ReadValue ('HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Excel.exe' ,'' )If Not $Excel Quit 1 EndIf $File = '%TEMP%\' + @USERID + '_' + @WKSTA + '.XLS' If Exist ($File ) DEL $File EndIf Global $Admin ,$Ram ,$FreeSpace ,$ComputerMfg ,$ComputerModel ,$MyBIOSInfo ,$Serial $Admin = IIf (InGroup (@WKSTA +'\' +SidToName ('S-1-5-32-544' )),'Yes' ,'No' )$RAM = MemorySize ()$FreeSpace = DiskSpace (,1 )$ComputerMfg = WMIQuery ("Manufacturer" ,"Win32_ComputerSystem" )[0 ]$ComputerModel = WMIQuery ("Model" ,"Win32_ComputerSystem" )[0 ]$MyBIOSInfo = GetBIOSInfo ()$Serial = $MyBIOSInfo [3 ] SendToXLS ($File ) If Exist ($File ) $Report = $Excel +CHR (32 )+$File RUN $Report EndIf Exit 1 Function SendToXLS($Output ) Dim $Excel , $Workbook , $Row , $App , $AF , $Error $Excel = CreateObject ("Excel.Application" ) If $Excel $Excel.DisplayAlerts = 0 $Workbook = $Excel.Workbooks.Add (-4167 ) If $Workbook $Workbook.ActiveSheet.Rows (1 ).Columns (1 ).Value = "DATE" $Workbook.ActiveSheet.Rows (1 ).Columns (1 ).Interior.Color = &EED2BD $Workbook.ActiveSheet.Rows (1 ).Columns (1 ).Font.Bold = -1 $Workbook.ActiveSheet.Rows (1 ).RowHeight = 12.75 $Workbook.ActiveSheet.Rows (1 ).VerticalAlignment = 2 $Workbook.ActiveSheet.Rows (1 ).HorizontalAlignment = -4131 $Workbook.ActiveSheet.Rows (1 ).Columns (2 ).Value = "COMPUTER" $Workbook.ActiveSheet.Rows (1 ).Columns (2 ).Interior.Color = &EED2BD $Workbook.ActiveSheet.Rows (1 ).Columns (2 ).Font.Bold = -1 $Workbook.ActiveSheet.Rows (1 ).Columns (3 ).Value = "IP" $Workbook.ActiveSheet.Rows (1 ).Columns (3 ).Interior.Color = &EED2BD $Workbook.ActiveSheet.Rows (1 ).Columns (3 ).Font.Bold = -1 $Workbook.ActiveSheet.Rows (1 ).Columns (4 ).Value = "MAC" $Workbook.ActiveSheet.Rows (1 ).Columns (4 ).Interior.Color = &EED2BD $Workbook.ActiveSheet.Rows (1 ).Columns (4 ).Font.Bold = -1 $Workbook.ActiveSheet.Rows (1 ).Columns (5 ).Value = "USERID" $Workbook.ActiveSheet.Rows (1 ).Columns (5 ).Interior.Color = &EED2BD $Workbook.ActiveSheet.Rows (1 ).Columns (5 ).Font.Bold = -1 $Workbook.ActiveSheet.Rows (1 ).Columns (6 ).Value = "FULLNAME" $Workbook.ActiveSheet.Rows (1 ).Columns (6 ).Interior.Color = &EED2BD $Workbook.ActiveSheet.Rows (1 ).Columns (6 ).Font.Bold = -1 $Workbook.ActiveSheet.Rows (1 ).Columns (7 ).Value = "ADMIN" $Workbook.ActiveSheet.Rows (1 ).Columns (7 ).Interior.Color = &EED2BD $Workbook.ActiveSheet.Rows (1 ).Columns (7 ).Font.Bold = -1 $Workbook.ActiveSheet.Rows (1 ).Columns (8 ).Value = "OS" $Workbook.ActiveSheet.Rows (1 ).Columns (8 ).Interior.Color = &EED2BD $Workbook.ActiveSheet.Rows (1 ).Columns (8 ).Font.Bold = -1 $Workbook.ActiveSheet.Rows (1 ).Columns (9 ).Value = "SP" $Workbook.ActiveSheet.Rows (1 ).Columns (9 ).Interior.Color = &EED2BD $Workbook.ActiveSheet.Rows (1 ).Columns (9 ).Font.Bold = -1 $Workbook.ActiveSheet.Rows (1 ).Columns (10 ).Value = "CPU" $Workbook.ActiveSheet.Rows (1 ).Columns (10 ).Interior.Color = &EED2BD $Workbook.ActiveSheet.Rows (1 ).Columns (10 ).Font.Bold = -1 $Workbook.ActiveSheet.Rows (1 ).Columns (11 ).Value = "SPEED" $Workbook.ActiveSheet.Rows (1 ).Columns (11 ).Interior.Color = &EED2BD $Workbook.ActiveSheet.Rows (1 ).Columns (11 ).Font.Bold = -1 $Workbook.ActiveSheet.Rows (1 ).Columns (12 ).Value = "MEMORY" $Workbook.ActiveSheet.Rows (1 ).Columns (12 ).Interior.Color = &EED2BD $Workbook.ActiveSheet.Rows (1 ).Columns (12 ).Font.Bold = -1 $Workbook.ActiveSheet.Rows (1 ).Columns (13 ).Value = "FREESPACE" $Workbook.ActiveSheet.Rows (1 ).Columns (13 ).Interior.Color = &EED2BD $Workbook.ActiveSheet.Rows (1 ).Columns (13 ).Font.Bold = -1 $Workbook.ActiveSheet.Rows (1 ).Columns (14 ).Value = "MFG" $Workbook.ActiveSheet.Rows (1 ).Columns (14 ).Interior.Color = &EED2BD $Workbook.ActiveSheet.Rows (1 ).Columns (14 ).Font.Bold = -1 $Workbook.ActiveSheet.Rows (1 ).Columns (15 ).Value = "MODEL" $Workbook.ActiveSheet.Rows (1 ).Columns (15 ).Interior.Color = &EED2BD $Workbook.ActiveSheet.Rows (1 ).Columns (15 ).Font.Bold = -1 $Workbook.ActiveSheet.Rows (1 ).Columns (16 ).Value = "SERIAL" $Workbook.ActiveSheet.Rows (1 ).Columns (16 ).Interior.Color = &EED2BD $Workbook.ActiveSheet.Rows (1 ).Columns (16 ).Font.Bold = -1 $Row = 2 $Workbook.ActiveSheet.Rows ($Row ).Columns (1 ).Value = @Date $Workbook.ActiveSheet.Rows ($Row ).Columns (2 ).Value = @WKSTA $Workbook.ActiveSheet.Rows ($Row ).Columns (3 ).Value = Join (Split (@IPADDRESS0 ,' ' ),'' ) $Workbook.ActiveSheet.Rows ($Row ).Columns (4 ).Value = @ADDRESS $Workbook.ActiveSheet.Rows ($Row ).Columns (5 ).Value = @UserID $Workbook.ActiveSheet.Rows ($Row ).Columns (6 ).Value = @FullName $Workbook.ActiveSheet.Rows ($Row ).Columns (7 ).Value = $Admin $Workbook.ActiveSheet.Rows ($Row ).Columns (8 ).Value = @ProductType $Workbook.ActiveSheet.Rows ($Row ).Columns (9 ).Value = @CSD $Workbook.ActiveSheet.Rows ($Row ).Columns (10 ).Value = Trim (@CPU ) $Workbook.ActiveSheet.Rows ($Row ).Columns (11 ).Value = @MHz $Workbook.ActiveSheet.Rows ($Row ).Columns (12 ).Value = $Ram $Workbook.ActiveSheet.Rows ($Row ).Columns (13 ).Value = $FreeSpace $Workbook.ActiveSheet.Rows ($Row ).Columns (14 ).Value = $ComputerMfg $Workbook.ActiveSheet.Rows ($Row ).Columns (15 ).Value = $ComputerModel $Workbook.ActiveSheet.Rows ($Row ).Columns (16 ).Value = $Serial ; This line adds a hyperlink into the worksheet if wanted ; $= $Workbook.ActiveSheet.Hyperlinks.Add($Workbook.ActiveSheet.Range("D1"),"http://www.winzip.com",,"WinZip", "WinZip Home Page") $AF = $Workbook.ActiveSheet.Columns (1 ).AutoFit $AF = $Workbook.ActiveSheet.Columns (2 ).AutoFit $AF = $Workbook.ActiveSheet.Columns (3 ).AutoFit $AF = $Workbook.ActiveSheet.Columns (4 ).AutoFit $AF = $Workbook.ActiveSheet.Columns (5 ).AutoFit $AF = $Workbook.ActiveSheet.Columns (6 ).AutoFit $AF = $Workbook.ActiveSheet.Columns (7 ).AutoFit $AF = $Workbook.ActiveSheet.Columns (8 ).AutoFit $AF = $Workbook.ActiveSheet.Columns (9 ).AutoFit $AF = $Workbook.ActiveSheet.Columns (10 ).AutoFit $AF = $Workbook.ActiveSheet.Columns (11 ).AutoFit $AF = $Workbook.ActiveSheet.Columns (12 ).AutoFit $AF = $Workbook.ActiveSheet.Columns (13 ).AutoFit $AF = $Workbook.ActiveSheet.Columns (14 ).AutoFit $AF = $Workbook.ActiveSheet.Columns (15 ).AutoFit $AF = $Workbook.ActiveSheet.Columns (16 ).AutoFit $AF = $Workbook.ActiveSheet.Select $Workbook.ActiveSheet.Name = "Sys Info " + @WKSTA Endif $AF = $WorkBook.SaveAs ($Output ) $Workbook = 0 $Excel.Quit () $Excel = 0 Endif EXIT @ERROR EndFunction Function DiskSpace(optional $drive ,$format ) Dim $objWMIService , $sWQL , $colDrives , $objDrive If Not $drive $drive ='%WINDIR%' EndIf $format =Val ($format ) If $format <5 $format =IIf ($format =1 ,1024 ,IIf ($format =2 ,1024.0 *1024 ,IIf ($format =3 ,1024.0 *1024 *1024 ,IIf ($format =4 ,1024.0 *1024 *1024 *1024 ,1 )))) $diskspace =Cdbl (GetDiskSpace ($drive ))/$format $diskspace =Val ($diskspace ) Else $objWMIService =GetObject ('WinMgmts:root/cimv2' ) $sWQL = "Select Size, FreeSpace FROM Win32_LogicalDisk WHERE Name='" +Left ($drive ,2 )+"'" $colDrives =$objWMIService.ExecQuery ($sWQL ) For Each $objDrive in $colDrives $diskspace =Cdbl ($objDrive.FreeSpace )/Cdbl ($objDrive.Size )*100 $diskspace =Val ($diskspace ) Next EndIf $objWMIService =0 Exit @ERROR EndFunction Function WMIQuery($sWhat , $sFrom , Optional $sComputer , $sWhere , $x , $root )Dim $sQuery , $objEnum , $sValue , $sItem , $TMP , $SystemSet , $ , $objInstance If Not $sComputer $sComputer ="." EndIf If InStr ($sComputer ,'\' ) $sComputer =Right ($sComputer ,InStrRev ($sComputer ,'\' )) EndIf If Not $root $root ="\root\cimv2" EndIf $sQuery = "Select " + $sWhat + " From " + $sFrom If $sWhere And $x $sQuery = $sQuery +" Where " +$sWhere +" = '" +$x +"'" EndIf $SystemSet = GetObject ("winmgmts:{impersonationLevel=impersonate}!\\" +$sComputer +$root )If @ERROR Exit Val ("&" +Right (DecToHex (@ERROR ),4 )) EndIf $objEnum = $SystemSet.ExecQuery ($sQuery )If @ERROR Exit Val ("&" +Right (DecToHex (@ERROR ),4 )) EndIf For Each $objInstance in $objEnum If $objInstance $ =Execute ("$" +"sValue = $" +"objInstance." +$sWhat ) If VarType ($sValue ) & 8192 For Each $sItem in $sValue $tmp =$tmp +'|' +Trim ($sItem ) Next Else $tmp =$tmp +'|' +Trim ($svalue ) EndIf EndIf Next $WMIQuery = Split (SubStr ($tmp ,2 ),'|' ) $SystemSet =0 Exit Val ("&" +Right (DecToHex (@ERROR ),4 ))EndFunction Function GetBIOSInfo() Dim $sComputer , $WMIService , $BIOSItems , $BIOSName , $BIOSVersion , $SMBIOSVersion Dim $Item , $SerialNumber , $Manufacturer , $BIOSArray [4 ] $sComputer = '' $WMIService = GetObject ('WinMgmts:root/cimv2' ) $BIOSItems = $WMIService.ExecQuery ( "Select * from Win32_BIOS where PrimaryBIOS = true" , , 48 ) For Each $Item in $BIOSItems $BIOSName = Trim ($Item.Name ) $BIOSVersion = Trim ($Item.Version ) $SMBIOSVersion = Trim ($Item.SMBIOSBIOSVersion ) $SerialNumber = Trim ($Item.SerialNumber ) $Manufacturer = Trim ($Item.Manufacturer ) Next $BIOSArray [0 ]=$BIOSName $BIOSArray [1 ]=$BIOSVersion $BIOSArray [2 ]=$SMBIOSVersion $BIOSArray [3 ]=$SerialNumber $BIOSArray [4 ]=$Manufacturer $GetBIOSInfo =$BIOSArray EndFunction