[WMI] Partnummer query *

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
Edit: Oh help, ben topic titel vergeten invullen :X

We zochten een snelle oplossing om bepaalde basisinfo van het netwerk snel terug te vinden. Hiervoor gebruik ik volgende PowerShell script, een samenraapsel van code snippets en eigen opzoekwerk.

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$arrComputers = get-Content -Path "network.txt"

foreach ($strComputer in $arrComputers)
{
   $colItems = get-wmiobject -class "Win32_BIOS" -namespace "root\CIMV2" `
    -computername $strComputer

   foreach ($objItem in $colItems)
   {
    Write-host "Computer Name: " $strComputer
    Write-host "Manufacturer : " $objItem.Manufacturer
    write-host "BIOS Version : " $objItem.SMBIOSBIOSVersion
    write-host "Serial Number: " $objItem.SerialNumber
   }

   $colItems = get-wmiobject -class "Win32_ComputerSystem" -namespace "root\CIMV2" `
    -computername $strComputer

   foreach ($objItem in $colItems)
   {
    write-host "Model Name   : " $objItem.Model
    write-host "Total RAM    : " ($objItem.TotalPhysicalMemory/(1024*1024*1024)) GB
    write-host 
   }
}


Dit script doet exact wat ik wil (behalve het geheugen afronden, naar daar vind ik nog wel een oplossing voor), maar ik ontbreek eigenlijk nog één query: $objItem.PartNumber. Ik vind die info in de CIM_PhysicalElement, maar alle klasses die beginnen met CIM doen gek als ik ze in mijn code stop. Met alles van Win32 werkt het wel - behalve indien ze afhankelijk zijn van een CIM.

Het basisprobleem is dat ik natuurlijk maar half weet waar ik mee bezig ben. Ik ga me verdiepen in PowerShell omdat ik er veel meer mee kan doen dan met batch bestanden. Alleen: dit (inventarisatie)tool kan niet wachten tot ik voldoende geleerd heb. Deadlines en zo. Dus vergeef me indien dit probleem obvious is voor de ervaren sysadmin.

Acties:
  • 0 Henk 'm!

  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Doen gek -- kan je iets specifieker zijn? Misschien zelfs een voorbeeldje posten van wat er niet lukt? :)

Je kan iig eens naar de scriptomatic van Microsoft kijken, die kan je vermoedelijk een eind op weg helpen.

Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
elevator schreef op maandag 16 februari 2009 @ 15:38:
Doen gek -- kan je iets specifieker zijn? Misschien zelfs een voorbeeldje posten van wat er niet lukt? :)

Je kan iig eens naar de scriptomatic van Microsoft kijken, die kan je vermoedelijk een eind op weg helpen.
Een normale output voor bovenstaande code is bijvoorbeeld dit:
code:
1
2
3
4
5
6
Computer Name:  XXXXXXXX00033
Manufacturer :  Hewlett-Packard
BIOS Version :  786B2 v2.44
Serial Number:  2XXXXXXX1D8
Model Name   :  HP d530 SFF(DZ030A)
Total RAM    :  1.24168395996094 GB


Stel volgende code:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
$arrComputers = get-Content -Path "network.txt"

foreach ($strComputer in $arrComputers)
{
   $colItems = get-wmiobject -class "CIM_PhysicalElement" -namespace "root\CIMV2" `
    -computername $strComputer

   foreach ($objItem in $colItems)
   {
    Write-host "Computer Name: " $strComputer
    Write-host "Part Number  : " $objItem.PartNumber
   }
}


Deze returned 40 keer per computer:
code:
1
2
Computer Name:  XXXXXXXXX00033
Part Number  :

(dat is dus het gekke gedrag)

Ik heb scriptomatic liggen, maar het werkte niet. Misschien moet ik als admin inloggen om dat programma uit te voeren, zal dat zo eens proberen.

Trouwens, als ik gewoon in de PowerShell dit doe:
C#:
1
Get-WmiObject CIM_PhysicalElement


Dan krijg ik:
code:
1
2
3
4
5
6
7
8
9
10
                   DeviceType SerialNumber                                        Enabled Description                  
                   ---------- ------------                                        ------- -----------                  
                            3                                                        True 0                            
                                                                                          System Slot                  
                              CND8081YMJ                                                  System Enclosure             
                                                                                          Physical Memory              
                                                                                          Physical Memory              
                                                                                          Base Board                   
                                                                                          Physical Memory Array        
                              801061PDB001QDJG8GPH


Die "CND8081YMJ" wil ik dus te pakken krijgen. Euh, sorry, dit was inderdaad geen PN }:O

Hmz, zou objItem.SystemEnclosure lukken? Even proberen. Nee.

PS. Kan een mod mijn topic titel veranderen naar "Partnummer query" of zo? Misschien een .dev idee: zelf TT kunnen aanpassen :P

[ Voor 38% gewijzigd door YellowOnline op 16-02-2009 16:19 ]


Acties:
  • 0 Henk 'm!

  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Op zich is dat niet zo raar - als je MSDN er bij pakt zie je dit staan:
The CIM_PhysicalElement subclasses define any component of a system that has a distinct physical identity. Instances of this class can be defined in terms of labels that can be physically attached to the object. All processes, files, and logical devices are not considered to be physical elements. For example, it is not possible to attach a label to a modem; it is only possible to attach a label to the card that implements the modem. The same card could also implement a LAN adapter.

Tangible managed system elements (usually hardware items) have a physical manifestation. A managed system element is not necessarily a discrete component. For example, it is possible for a single card (a type of physical element) to host more than one logical device. The card would be represented by a single physical element associated with multiple logical devices.
Hier wordt al aangegeven dat meerdere componenten een PhysicalElement kunnen hebben - in jouw PC's zijn dat er dus blijkbaar 40.

Als ik:

C#:
1
 (get-wmiobject -class "CIM_PhysicalElement" -namespace "root\CIMV2" -computername ".") |% { $_.Name }


Uitvoer, krijg ik een aantal elementen terug (m'n hardidsk, mijn moederboard e.d.) maar in geen enkele is het partnumber ingevoerd.

Wat wil je precies krijgen -- is dat het partnumber van HP (die xxxxxx-xxx code) of wat is precies het doel? :)

Acties:
  • 0 Henk 'm!

  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Wat jij wil kan dus op twee manieren:

C#:
1
((get-wmiobject -class "CIM_PhysicalElement" -namespace "root\CIMV2" -computername ".") | Where-Object {$_.Name -eq "System Enclosure" }).SerialNumber 


zou de juiste info terug moeten krijgen, je kan ook dit doen:

C#:
1
 (GWMI -query "SELECT Serialnumber FROM CIM_PhysicalElement WHERE Name = 'System Enclosure'").SerialNumber


Maar waarom niet gewoon rechtstreeks aan Win32_SystemEnclosure vragen, oftewel:

C#:
1
(gwmi -Class Win32_SystemEnclosure -property SerialNumber).SerialNumber


Al je gepraat over een partnumber maakt het bijzonder onduidelijk als je stiekem een serienummer bedoelt :$

Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
elevator schreef op maandag 16 februari 2009 @ 16:09:

(...)

Wat wil je precies krijgen -- is dat het partnumber van HP (die xxxxxx-xxx code) of wat is precies het doel? :)
Inderdaad: het PN van die HP/Compaq is het doel.

Ik ga wat nadenken over het MSDN artikel. Dat heeft wat tijd nodig om door te dringen bij een wannabe-developper zoals ik. ;(

Edit: nee nee, serienummer is geen probleem, die zit ook in Win32_BIOS. Het is echt wel part number ;) Had me bovenaan vergist. PN komt er niet uit met dat commando, enkel SN. Ik geef toe hier even verwarring gesticht te hebben |:(

[ Voor 22% gewijzigd door YellowOnline op 16-02-2009 16:19 ]


Acties:
  • 0 Henk 'm!

  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Ik denk dat HP's hun eigen productnumber (!) niet kennen. Serialnumber wel, productnumber niet maar daar kan je snel genoeg achter komen door met script-o-matic te browsen.

Je kan natuurlijk ook met een lookup tabeletje gaan werken als de PC's echt hun eigen product nummer niet kennen, iets als:

C#:
1
2
3
$productNumbers = @{"Compaq 6710b" = "123456-B21"; "Compaq nc6320" = "567890-B21"; "P35-DS3R" = "Gigabyte"}

$productNumbers[ (gwmi -Class Win32_ComputerSystem -property Model).Model ]


Als je dan een beetje doorslaat, gooi je die lookup tabel in een XML filetje, en laat je voor de PC's waarvan je het niet zeker weet je PowerShell script automatisch bij de HP warranty inspector de warranty end date opvragen :P

Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
elevator schreef op maandag 16 februari 2009 @ 16:22:
Ik denk dat HP's hun eigen productnumber (!) niet kennen. Serialnumber wel, productnumber niet maar daar kan je snel genoeg achter komen door met script-o-matic te browsen.

Je kan natuurlijk ook met een lookup tabeletje gaan werken als de PC's echt hun eigen product nummer niet kennen, iets als:

C#:
1
2
3
$productNumbers = @{"Compaq 6710b" = "123456-B21"; "Compaq nc6320" = "567890-B21"; "P35-DS3R" = "Gigabyte"}

$productNumbers[ (gwmi -Class Win32_ComputerSystem -property Model).Model ]


Als je dan een beetje doorslaat, gooi je die lookup tabel in een XML filetje, en laat je voor de PC's waarvan je het niet zeker weet je PowerShell script automatisch bij de HP warranty inspector de warranty end date opvragen :P
Bedankt voor je stukje snippet alvast. Ik had al aan zoiets gedacht als plan B. De custom BIOS van de HPs geeft het PN weer, vandaar dat ik dacht dat er een manier moet zijn om deze er uit te krijgen. Het nadeel van een lookuptabel is dat die niet future-proof is, maar het is beter dan niets in ieder geval.

Acties:
  • 0 Henk 'm!

  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Volgens Google (nouja, eigenlijk volgens HP.com :P ) zou je productnumber hier in moeten zitten: http://forums11.itrc.hp.c...nswer.do?threadId=1247970

Je komt dan op zoiets uit:

C#:
1
(gwmi -Class Win32_ComputerSystem -property OEMStringArray).OEMStringArray

Op een aantal HP servers lijkt dat inderdaad te kloppen, maar hoe future proof dat is weet ik ook niet :)

Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
elevator schreef op maandag 16 februari 2009 @ 16:32:
Volgens Google (nouja, eigenlijk volgens HP.com :P ) zou je productnumber hier in moeten zitten: http://forums11.itrc.hp.c...nswer.do?threadId=1247970

Je komt dan op zoiets uit:

C#:
1
(gwmi -Class Win32_ComputerSystem -property OEMStringArray).OEMStringArray

Op een aantal HP servers lijkt dat inderdaad te kloppen, maar hoe future proof dat is weet ik ook niet :)
Helemaal hetzelfde probleem als ik inderdaad. Ik krijg hier een exotisch resultaat met die code :)
code:
1
2
www.hp.com
ABS 7A 7B 7C


Zal morgen wat aan de slag gaan met Scriptomatic onder mijn admin account (thuis geen Windows). Als dat niet lukt wordt het de lookup table. Alvast bedankt voor al je moeite elevator.
Pagina: 1