Avatar billede emort Nybegynder
29. august 2006 - 09:50 Der er 14 kommentarer og
1 løsning

Tilpasning af spcript

hej jeg er faldet over et inventory script som lige kan alt det jeg vil have det til UNtagen 1 ting. den "samler" kun en ip adresse og 1 mac adresse dvs hvis du har 3 Nic i din maskine så tager den kun 1 af dem. er der nogen af jer kloge hoveder der kan tilpasse dette?

' Comments:          This script is designed to be run from a logon script and enter details into an access database.
' Datasource need to be changed to reflect location and name of database.
'
' Database Fields:  ComputerName          Text        255
'                  Model                Text        255
'                  Vendor                Text        255
'                  Serial                Text        255
'                  Version              Text        255
'                  CPU                  Text        255
'                  Speed                Text        255
'                  MonitorManufacturer  Text        255
'                  MonitorModel          Text        255
'                  VideoRAM              Number      Long Integer
'                  VideoCard            Text        255
'                  VideoMode            Text        255
'                  OS                    Text        255
'                  SP                    Text        255
'                  Asset                Text        255
'                  CDrive                Text        255   
'                  CFreeSpace            Number      Long Integer
'                  CTotalSpace          Number      Long Integer
'                  DDrive                Text        255
'                  DFreeSpace            Number      Long Integer   
'                  DTotalSpace          Number      Long Integer
'                  CD                    Text        255
'                  CDDescription        Text        255
'                  RAM                  Number      Long Integer   
'                  NetworkCard          Text        255
'                  MAC                  Text        255
'                  User                  Text        255
'                  Date                  Date/Time    Short Date
'                  Time                  Date/Time    Medium Time

' ********** Global Declarations **********

Dim strComputerName    ' The Computer Name to be queried via WMI
Dim strWinMgt        ' The WMI management String
Dim objCon        ' A Connection Object for database connectivity
Dim objRS        ' A Recordset Object for database connectivity
Dim sProviderName    ' The OLE Provider Type
Dim iCursorType        ' The Cursor Type for the Recordset
Dim iLockType        ' The Lock Type for the Recordset
Dim sDataSource        ' The name and location of the database
Dim intRam        ' The amount of RAM in the computer.
Dim CompSysSet       
Dim CompSys

strComputerName = "."
strWinMgt = "winmgmts://" & strComputerName &""


'********** Beginning of Main Code **********
'
Set CompSysSet = GetObject(strWinMgt).ExecQuery("select * from Win32_ComputerSystem")
For Each CompSys In CompSysSet
strName = CompSys.Name
Next

Call subConnectionOpen

strCriteria = "ComputerName = '"& strName &"'"
objRS.Find strCriteria

If objRS.EOF Then

    Call subGetComputerInfo
   
Else
   
Call subDeleteRecord
Call SubGetComputerInfo
   
End If

Call subConnectionClose

'********** End of Main Code **********


'********** Beginning of Sub routine to Open database **********

Sub subConnectionOpen
Set objCon = CreateObject("ADODB.Connection")
Set objRS = CreateObject("ADODB.Recordset")
sProviderName = "Microsoft.Jet.OLEDB.4.0"
iCursorType = 1
iLockType = 3
''''''''''''Change the following line to refelct correct DB location and name'''''''''''
sDataSource = "\\nt6135\c$\Inventory.mdb"
objCon.Provider = sProviderName
objCon.Properties("Data Source") = sDataSource
objCon.Open
objRS.CursorType = iCursorType
objRS.LockType = iLockType
objRS.Source = "Computerinfo"
objRS.ActiveConnection = objCon
objRS.Open
End Sub

'********** End of sub routine to Open database **********


'********** Beginning of Sub routine to Close database **********

Sub subConnectionClose
Set objRS = Nothing
Set objCon = Nothing
End Sub

'********** End of Sub routine to Close database **********


'********** Beginning of Sub routine to delete record **********

Sub subDeleteRecord

objRS.Delete
objRS.Update
End Sub

'********** End of Sub routine to delete record **********


'********** Beginning of Sub routine to get & write computer info **********



Sub subGetComputerInfo

' Get Model, Manufacturer, Computername and Memory
Set CompSysSet = GetObject(strWinMgt).ExecQuery("select * from Win32_ComputerSystem")
For Each CompSys In CompSysSet
strModel = CompSys.Model
ComputerName = CompSys.Name
strVendor = CompSys.Manufacturer
intRAM = Clng(CompSys.TotalPhysicalMemory/1048576 )
Next

' Get BIOS info
Set CompSysSet = GetObject(strWinMgt).ExecQuery("select * from Win32_BIOS")
For Each CompSys In CompSysSet
strSerial = CompSys.SerialNumber
strVersion = CompSys.Version
Next

' Get CPU info
Set CompSysSet = GetObject(strWinMgt).ExecQuery("select * from Win32_Processor")
For Each CompSys In CompSysSet
strCPU = CompSys.Name
' StrSpeed = CompSys.CurrentClockSpeed
StrSpeed = CompSys.MaxClockSpeed
Next

' Get Monitor Info
Set CompSysSet = GetObject(strWinMgt).ExecQuery("select * from Win32_DesktopMonitor")
For Each CompSys In CompSysSet
strMonManufacturer = CompSys.MonitorManufacturer
strMonModel = CompSys.Description
Next

' Get Video Card Info

Set CompSysSet = GetObject(strWinMgt).ExecQuery("select * from Win32_VideoController")
For Each CompSys In CompSysSet
strVidRAM = CompSys.AdapterRAM/1024
strVidCard = CompSys.Description
strVidMode = CompSys.VideoModeDescription
Next

' Get OS Info
Set CompSysSet = GetObject(strWinMgt).ExecQuery("select * from Win32_OperatingSystem")
For Each CompSys In CompSysSet
strOS = CompSys.Caption
strSP = CompSys.CSDVersion
Next


' Get Asset Tag Info
Set CompSysSet = GetObject(strWinMgt).ExecQuery("select * from Win32_SystemEnclosure")
For Each CompSys In CompSysSet
strAsset = CompSys.SMBIOSAssetTag
Next


' Get Disk Information for C drive
'
Set DiskSet = GetObject(strWinMgt).ExecQuery("select FreeSpace,Size,Name from Win32_LogicalDisk where DeviceID = 'C:' and DriveType=3")
For Each Disk In DiskSet
Rem strDisplayDiskInfo = strDisplayDiskInfo & "Drive " & Disk.Name & " Free Space: " & Clng(Disk.FreeSpace/1000000) & " MB Total Size: " & Clng(Disk.Size/1000000) & " MB"& vbCrlf
    strCDriveLetter = Left(disk.name,2)
strCFreeSpace = Disk.FreeSpace/2^30
strCTotalSpace = Disk.Size/2^30
Next

' Get Disk Information for D drive
'
Set DiskSet = GetObject(strWinMgt).ExecQuery("select FreeSpace,Size,Name from Win32_LogicalDisk where DeviceID = 'D:' and DriveType=3")
For Each Disk In DiskSet
Rem strDisplayDiskInfo = strDisplayDiskInfo & "Drive " & Disk.Name & " Free Space: " & Clng(Disk.FreeSpace/1000000) & " MB Total Size: " & Clng(Disk.Size/1000000) & " MB"& vbCrlf
    strDDriveLetter = Left(disk.name,2)
strDFreeSpace = Disk.FreeSpace/2^30
strDTotalSpace = Disk.Size/2^30
Next

' Get Network Card Info
Set CompSysSet = GetObject(strWinMgt).ExecQuery("select * from Win32_NetworkAdapterConfiguration where IPEnabled = 'TRUE'")
For Each CompSys In CompSysSet
strMAC = CompSys.MACAddress
strIPAddress = CompSys.IPAddress(i)
strNICModel = CompSys.Description
Next

' Get User Info
Set CompSysSet = GetObject(strWinMgt).ExecQuery("select * from Win32_ComputerSystem")
For Each CompSys In CompSysSet
strUser = CompSys.UserName

Next

' Get CD Info
'Set CompSysSet = GetObject(strWinMgt).ExecQuery("select * from Win32_CDROMDrive")
'For Each CompSys In CompSysSet
'strCD = CompSys.Drive
'strCDDescription = CompSys.Name

'If you want to run manually and enter a descriptive note, uncomment the following line'
'strNote = InputBox("Please enter a note:")

'Next


objRS.AddNew
objRS("ComputerName") = strName
objRS("Note") = strNote
objRS("Model") = strModel
objRS("Vendor") = strVendor
objRS("Serial") = strSerial
objRS("Version") = strVersion
objRS("CPU") = strCPU
objRS("Speed") = strSpeed
objRS("MonitorManufacturer") = strMonManufacturer
objRS("MonitorModel") = strMonModel
objRS("VideoRAM") = strVidRAM/1024
objRS("VideoCard") = strVidCard
objRS("VideoMode") = strVidMode
objRS("OS") = strOS
objRS("SP") = strSP
objRS("Asset") = strAsset
objRS("CDrive") = strCDriveLetter
objRS("CFreeSpace") = strCFreeSpace
objRS("CTotalSpace") = strCTotalSpace
objRS("DDrive") = strDDriveLetter
objRS("DFreeSpace") = strDFreeSpace
objRS("DTotalSpace") = strDTotalSpace
objRS("CD") = strCD
objRS("CDDescription") = strCDDescription
objRS("RAM") = intRAM
objRS("NetworkCard") = strNICModel
objRS("MAC") = strMAC
objRS("IPAddress")= strIPAddress
objRS("User") = strUser
objRS("Date") = Date()
objRS("Time") = Time()
objRS.Update
objRS.Close

End Sub

'********** End of Sub routine to get & write computer info **********

'*****************************************************************************************
Avatar billede miqe Nybegynder
29. august 2006 - 10:24 #1
Som jeg ser det er problemet at du for hvert kort lægger værdierne ind i samme variabel.
Dermed overskriver sidste kort det forige osv...
Følgende sektion:

' Get Network Card Info
Set CompSysSet = GetObject(strWinMgt).ExecQuery("select * from Win32_NetworkAdapterConfiguration where IPEnabled = 'TRUE'")
For Each CompSys In CompSysSet
strMAC = CompSys.MACAddress
strIPAddress = CompSys.IPAddress(i)
strNICModel = CompSys.Description
Next

ændres til:

' Get Network Card Info
Set CompSysSet = GetObject(strWinMgt).ExecQuery("select * from Win32_NetworkAdapterConfiguration where IPEnabled = 'TRUE'")
dim cardamount
cardamount = UBound(CompSysSet)
dim strMac(cardamount)
dim strIPAddress(cardamount)
dim strNICModel(cardamount)
dim j=0
For Each CompSys In CompSysSet
strMAC(j) = CompSys.MACAddress
strIPAddress(j) = CompSys.IPAddress(i)
strNICModel(j) = CompSys.Description
j=j+1
Next

Samtidig skal du i bunden ændre:

objRS("NetworkCard") = strNICModel
objRS("MAC") = strMAC
objRS("IPAddress")= strIPAddress

til:

for i=0 to cardamount
objRS("NetworkCard"&i) = strNICModel(i)
objRS("MAC"&i) = strMAC(i)
objRS("IPAddress"&i)= strIPAddress(i)
next

Har ikke testet det, men det er da et forsøg værd.
Avatar billede emort Nybegynder
29. august 2006 - 10:47 #2
ja det ser lovende ud..
men spørgsmål:

hvordan får jeg det ind i DB en?

pt er der kun 1 MAC kollone og 1 ipadresse kolonne
forstiller mig der skal tilføjes MAC1, MAC2, MAC3 og IPAddress1, IPAddress2, IPAddress3
forståeligt ?
Avatar billede miqe Nybegynder
29. august 2006 - 11:04 #3
Det lyder fornuftigt.
Bare 0 til 2 i stedet for 1 til 3
Glem ikke NetworkCard0, NetworkCard1, NetworkCard2
Går ud fra du har adgang til databasen og kan tilføje disse kollonner.
Samtidig kan du slette MAC, IPAddress, og NetworkCard (altså dem uden et tal i enden)
Du skal sørge for at der i databasen er plads til de kort du har.
Har du en miliard netkorti maskinen skal der også være kollonner op til en miliard for hver af de 3 (0 til en miliard -1).
Avatar billede emort Nybegynder
29. august 2006 - 11:15 #4
Igen tak for din hjælp..

Slettet
IPAddress, MAC, NetworkCard i db'en

Tilføjet:
NetworkCard0, NetworkCard1, NetworkCard2, IPAddress0, IPAddress1, IPAddress2, MAC0, MAC1, MAC2
Så Db er klar..

Har yderliger tilføjet ændring du forslår i dit svar men jeg får en fejl:
Line: 218 char 12 Expected integer constant....
Det passer med linjen : dim strMac(cardamount)
Avatar billede miqe Nybegynder
29. august 2006 - 11:51 #5
Jeg har lige opdaget via en anden tråd på exp at dim ikke er så glad for variable men kun vil have konstanter.
Da du alligevel arbejder med et fixed antal kollonner i din db er det nemmeste at ændre:

dim strMac(cardamount)
dim strIPAddress(cardamount)
dim strNICModel(cardamount)
til:

dim strMac(3)
dim strIPAddress(3)
dim strNICModel(3)
Avatar billede miqe Nybegynder
29. august 2006 - 11:53 #6
Ved samme lejlighed bør du nok også for god ordens skyld ændre:
for i=0 to cardamount
til:
for i=0 to 3

og fjerne:
dim cardamount
cardamount = UBound(CompSysSet)
Avatar billede emort Nybegynder
29. august 2006 - 11:57 #7
tak .. :-D
tilføjede rettelsen +  dim j=0 (har fjernede dim)

for en fejl i linje 217 wrong number of arguments or invalid property assignment
Passer med cardamount = UBound(CompSysSet)
Avatar billede miqe Nybegynder
29. august 2006 - 12:06 #8
(29/08-2006 11:53:36) -> Fjern linien
dim j=0          er ok
dim cardamount    kan fjernes sammen med
cardamount = UBound(CompSysSet)
Avatar billede emort Nybegynder
29. august 2006 - 12:24 #9
Hmm der har jeg nok lige læst lidt stærkt :-d jeg undskylder..

har ændret:
dim cardamount Fjernet
cardamount = UBound(CompSysSet)Fjernet
j=0 til dim j=0  (expected end of statement) i linje
Avatar billede emort Nybegynder
29. august 2006 - 12:45 #10
altså jeg får en FEJL dim j=0 linjen når der står:"dim j=0"
Avatar billede miqe Nybegynder
29. august 2006 - 13:05 #11
ok.
Ændre:
dim j=0
til:
dim j
j=0
Avatar billede emort Nybegynder
29. august 2006 - 13:30 #12
nu presser jeg sku nok citronen :-D MEN

Error_ Item cannot be found in the collection corresponding to the request name or ordinal
surce adodb.recordset
linje nummer passer med
objRS("NetworkCard"&i) = strNICModel(i)

kunne forstille mig det er for de jeg køre scriptet på en maskinnne der ikke har 3 NIC'S kan der inholdes null værdi?
Avatar billede miqe Nybegynder
29. august 2006 - 13:53 #13
Kan være jeg har forhastet mig med min for-løkke
Prøv at ændre:
for i=0 to 3
til:
for i=0 to 2

Går ud fra at du har navngivet dem med endelser 0, 1 og 2 i db!?
Avatar billede emort Nybegynder
29. august 2006 - 14:15 #14
Det burte jeg sku da slev have set doh!
Du skal have mange tak for ALT hjælpsomhed og tolodighed!
du har hjulpet mig MEGET professionelt igennem en problemstilling, ingen tvivl om at du mestre det her. jeg takker for din hjælp igen

/Emort
Avatar billede miqe Nybegynder
29. august 2006 - 14:59 #15
Jeg er glad for din tak.
Det skal dog siges at mit kendskab til VBScript er meget begrænset og at jeg nok ville kunne have guidet dig hurtigere igennem, hvis jeg mestrede det.
Det meste af min erfaring med VB stammer fra Excel-Makroer og især fra Basic 15 år tilbage i tiden.
Heldigvis ligner de fleste populære programmerings i høj grad hinanden og med de resourcer vi har på nettet, kan man som regel finde noget information, der kan give et prej i den rigtige retning.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester