Gå til innhold

Sjekke hardware på andre maskiner


Anbefalte innlegg

Jeg har tenkt til å lage et VBS-script som sjekker hardware i andre maskiner i nettverket og dumper resultatet i feks en tekstfil. det er primært maskinnavn, ram og CPU jeg er på jakt etter.

 

Scriptet skal lese ip-adresser fra en tekstfil eller finne ut selv hvordan den skanner alle maskinene i et subnet.

 

noen som vet om dette er praktisk mulig?

Lenke til kommentar
Videoannonse
Annonse
Skal være mulig å gjøre dette i Sisoft Sandra.

Men du må ta en og en pc..

 

med citrka 150 maskinen kan dette ta litt tid....

 

 

jeg har funnet et script som lar det gjøre men jeg må endre litt på det slik at det fungerer slik jeg vil.

 

a) det må (helst automatisk) scanne alle maskiner i subnetet

b) få det til å gjøre som lokal admin på maskinene.

 

Klikk for å se/fjerne innholdet nedenfor

'************************************************* ****

' Script Witten by Larry Heintz

' Jan 2005 www.larryheintz.com

' This script will connect to the computer name you

' enter and query and return the following information

'

' CPU:

' - CPU Speed MHZ

' - CPU Manufacture

' - CPU Type

' - CPU Current Load

'

' Memory

' - Memory Bank

' - Memory Stick Size MB

' - Memory Speed MHZ

' - Memory Type

'

' Hard Drive

' - HD Model

' - HD Size GB

' - HD # of Partions

' - HD Type

' - Drive Letter

' - Used Space

' - Free Space

' - Size of Partion

' - Free Space %

'

' Script Usage:

' cscript hardware.vbs /computer:[Computer Name]

'************************************************* ****

On Error Resume Next

' Dims stuff

Dim objStdOut,args

Dim servername

' Set Stuff

Set objStdOut = Wscript.stdOut

Set args = Wscript.Arguments.Named

servername = trim(args.Item("computer"))

 

if wscript.arguments.count = 1 then

wscript.echo "CPU,Memory,Hard Drive Information for " & ucase(servername)

wscript.echo ""

if not (errorChecking (servername)) then

'// CPU Info

wscript.echo "CPU Information:"

wscript.echo "================"

For each objCPU in GetObject("winmgmts:{impersonationLevel=impersonate}\\" & servername & "\root\cimv2").InstancesOf("Win32_Processor")

Select Case objCPU.Family

Case 2

cputype = "Unknown"

Case 11

cputype = "Pentium brand"

Case 12

cputype = "Pentium Pro"

Case 13

cputype = "Pentium II"

Case 14

cputype = "Pentium processor with MMX technology"

Case 15

cputype = "Celeron "

Case 16

cputype = "Pentium II Xeon"

Case 17

cputype = "Pentium III"

Case 28

cputype = "AMD Athlon Processor Family"

Case 29

cputype = "AMD Duron Processor"

Case 30

cputype = "AMD2900 Family"

Case 31

cputype = "K6-2+"

Case 130

cputype = "Itanium Processor"

Case 176

cputype = "Pentium III Xeon"

Case 177

cputype = "Pentium III Processor with Intel SpeedStep Technology"

Case 178

cputype = "Pentium 4"

Case 179

cputype = "Intel Xeon"

Case 181

cputype = "Intel Xeon processor MP"

Case 182

cputype = "AMD AthlonXP Family"

Case 183

cputype = "AMD AthlonMP Family"

Case 184

cputype = "Intel Itanium 2"

Case 185

cputype = "AMD Opteron? Family"

End Select

wscript.echo " CPU MHZ: " & objCPU.CurrentClockSpeed

wscript.echo " CPU Manufacture: " & objCPU.Manufacturer

wscript.echo " CPU Type: " & cputype

wscript.echo " CPU Current Load: " & objCPU.LoadPercentage & "%"

next

wscript.echo ""

set objCPU = nothing

 

'// Memory Info

wscript.echo "Memory Information:"

wscript.echo "==================="

For Each objMem In GetObject("winmgmts:{impersonationLevel=impersonate}\\" & servername & "\root\cimv2").InstancesOf("Win32_PhysicalMemory")

Select Case objMem.MemoryType

Case 0

rtype = "Unknown"

Case 1

rtype = "Other"

Case 2

rtype = "DRAM"

Case 3

rtype = "Synchronous DRAM"

Case 4

rtype = "Cache DRAM"

Case 5

rtype = "EDO"

Case 6

rtype = "EDRAM"

Case 7

rtype = "VRAM"

Case 8

rtype = "SRAM"

Case 9

rtype = "RAM"

Case 10

rtype = "ROM"

Case 11

rtype = "Flash"

Case 12

rtype = "EEPROM"

Case 13

rtype = "FEPROM"

Case 14

rtype = "EPROM"

Case 15

rtype = "CDRAM"

Case 16

rtype = "3DRAM"

Case 17

rtype = "SDRAM"

Case 18

rtype = "SGRAM"

Case 19

rtype = "RDRAM"

Case 20

rtype = "DDR"

End Select

wscript.echo " Memory Bank: " & objMem.BankLabel

wscript.echo " Memory Size: " & objMem.Capacity/1024/1024 & " MB"

wscript.echo " Memory Speed: " & objMem.Speed & " MHZ"

wscript.echo " Memory Type: " & rtype

wscript.echo ""

next

wscript.echo ""

set objMem = nothing

 

'// Hard Drive Info

wscript.echo "Hard Drive Information:"

wscript.echo "======================="

For Each objHDInfo In GetObject("winmgmts:{impersonationLevel=impersonate}\\" & servername & "\root\cimv2").InstancesOf("Win32_DiskDrive")

wscript.echo " Hard Drive Model: " & objHDInfo.Model

wscript.echo " Hard Drive Size: " & clng(objHDInfo.Size/1024/1024/1024) & " GB"

wscript.echo " # of Partitions: " & objHDInfo.Partitions

wscript.echo " Hard Drive Type: " & objHDInfo.InterfaceType

wscript.echo ""

Next

wscript.echo ""

set objHDinfo = nothing

 

For Each objDisk In GetObject("winmgmts:{impersonationLevel=impersonate}\\" & servername & "\root\cimv2").InstancesOf("Win32_LogicalDisk Where DriveType = '3'")

freespace = left(objDisk.freespace/1024/1024/1024,4)

totalspace = left(objDisk.size/1024/1024/1024,4)

usedspace = left(totalspace/freespace,4)

freeperct = left(100/usedspace,2)

wscript.echo " Drive: " & objDisk.deviceid

wscript.echo " Used Space: " & usedspace & " GB"

wscript.echo " Free Space: " & freespace & " GB"

wscript.echo " Total Space: " & totalspace & " GB"

wscript.echo " Free: " & freeperct & "%"

wscript.echo ""

next

set objDisk = nothing

end if

wscript.echo "------------------------------------------------"

else

objStdOut.Write "Usage: cscript hardware.vbs /computer:[Computer Name]"

objStdOut.close

wscript.quit

end if

 

' Error Checking Function

Function errorChecking(ComputerName)

errorChecking = False

if err.number <> 0 then

if err.number = "462" then

wscript.echo ComputerName & ",Error,Unable to connect"

err.Clear ()

errorChecking = True

elseif err.number = "70" then 'General access denied error

wscript.echo ComputerName & ",Error,Permission Denied while trying to connect."

err.Clear ()

errorChecking = True

elseif err.number = "451" then 'HEX Error is: 1C3

err.Clear ()

errorChecking = True

elseif err.number = "-2147023174" then 'The RPC server is unavailable.

wscript.echo ComputerName & ",Error,Unable to connect error number -2147023174."

err.Clear ()

errorChecking = True

elseif err.number = "-2147023836" then

wscript.echo ComputerName & ",Error,Unable to connect error number --2147023836."

err.Clear ()

errorChecking = True

elseif err.number = "-2147022986" then

wscript.echo ComputerName & ",Error,Unable to connect error number -2147022986."

err.Clear ()

errorChecking = True

else

wscript.echo "Error is: " & err.number

wscript.echo "HEX Error is: " & hex(err.number)

wscript.echo "Desc. is: " & err.Description

wscript.echo "Source is: " & err.Source

err.Clear ()

end if

end if

end Function

Endret av ilpostino
Lenke til kommentar
SystemInfo.exe som følger med XP og W2k3 og nyere gjør jobben ganske enkelt.

 

dett evirket som det jeg var ute etter så slipper jeg å knote med scripting. det eneste jeg sliter med er når jeg får feilmelding om brukernavn/passord skal sjekke andre systemer.

 

edit: får også feilmelding om at RCF-serveren ikke er tilgjengelig men jeg sjekket under services og der stod det at den startet automatisk.

Endret av ilpostino
Lenke til kommentar
Domenebruker eller lokale?

Sjekka firewall?  Prøvd uten firewall?

 

jeg prøvde først brukernavnet til lokal admin på den eksterne maskinen. jeg fikk da følgende feilmelding: Feil: Påloggingsfeil: ukjent brukernavn eller feil passord.

 

C:\Documents and Settings\ehh\Skrivebord>pause

Trykk en tast for å fortsette...

 

da jeg prøvde med brukernavn/passord til domeneadmin fikk jeg feilmelding som følger: Feil: RPC-serveren er ikke tilgjengelig.

 

jeg har ikke prøvd å disable firewall på den eksterne maskinen. får teste det imorgen når han som sitter på den maskinen er her.

Lenke til kommentar

det var den innebygde brannmuren som var problemet.

 

nå har jeg gjort det slik at den kan scanne alle maskiner i et gitt subnett og dumper resultatet inn i en tekstfil. det er en tekstfil hva hver maskin. problemet blir nå å filtrere ut den infoen jeg skal ha fra datastreamen til systeminfo og legge alt inn i en og samme CSV-fil eller lignende.

Lenke til kommentar

da lærte jeg noe nytt idag også. jeg har hittil brukt > men viste ikke at en kunne bruke >> for å legge til noe i samme fil.

 

edit: dette blir kanskje et teit spm men er det mulig å sjekke datastrømmen fra systsminfo før det blir dumpet ut i tekstfilen i den hensikt å sile ut deler av informasjonen programmet gir?

Endret av ilpostino
Lenke til kommentar
da lærte jeg noe nytt idag også. jeg har hittil brukt > men viste ikke at en kunne bruke >> for å legge til noe i samme fil.

 

edit: dette blir kanskje et teit spm men er det mulig å sjekke datastrømmen fra systsminfo før det blir dumpet ut i tekstfilen i den hensikt å sile ut deler av informasjonen programmet gir?

9479437[/snapback]

 

PowerShell! :D

 

 

Men siden SystemInfo.exe (sikkert) ikke støtter PowerShell featurene så blir det nok mer jobb enn nytte... Skal du ikke uansett hente ut kun de dataene du trenger med OLEDB ellerno? Eller enda bedre; bare sleng csv filen inn i SQL Server og hent ut det du trenger derfra.

Lenke til kommentar

da tror jeg at jeg skal la det være slik det har blitt. takk for all hjelp. denne delen av forumet hadde ikke vært det samme uten deg og din ekspertise.

 

her er scriptet jeg endte op med:

 

@echo off
::Dette scriptet er laget av Einar Herstad-Hansen 13.09.07
::Dette scriptet bruker RCP. Port 469 må derfor være åpen både på udp og tcp
::ip_subnet settes til det subnettet som skal sjekkes. _IKKE_ ta med tallene etter siste punktum
::begynnelse_av_range skal settes til første tall av subnettet som skal sjekkes
::slutt_av_range settes til siste tall i subnettet som skal sjekkes. 

SET ip_subnet=000.000.000
SET start_på_range=000
SET slutt_av_range=000

::Dette er løkken som kjører gjennom alle ip_subnet-adressene
:start
systeminfo /S %ip_subnet%.%start_på_range% /U <brukernavn_på_adminkonto> /P <passord_på_adminkonto> /FO table >> systeminfo.txt 
IF %start_på_range%==%slutt_av_range% goto slutt
SET /A start_på_range=%start_på_range%+1
goto start

:slutt
::pause

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...