Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Добавит код для серийного Номера (http://forum.oszone.net/showthread.php?t=355886)

rafka 19-11-2024 10:24 3033280

Добавит код для серийного Номера
 
Добрый день !
код слишком длинный и поэтому не мог полностью кидать сюда.
Вопрос такого характера что кто может добавить код после `r`n$(addSp "Manufacturer" 15) : $model" что бы после модель компьютера показывал и Серийник ? Прошу очень помочь

Код:


function CompHw {

  if (-not $ip){return}
  $hst= ((get-wmiobject -list "StdRegProv" -computername $compAdr -namespace root\default).GetStringValue(2147483650,"SOFTWARE\Microsoft\Virtual Machine\Guest\Parameters","HostName")).sValue
  $memSum=0; $model=""; $memModule=""
  $cpu=(Get-WmiObject -Class CIM_Processor -ComputerName $compAdr).Name | Select-Object -first 1
  $cpu=$cpu -replace '  ',' '; $cpu=$cpu -replace '  ',' '; $cpu=$cpu -replace '  ',' ' ;$cpu=$cpu -replace '  ',' '
  $cpu=$cpu -replace ' CPU ',' '
  $cpu=$cpu -replace 'Intel\(R\) Core\(TM\)2 Duo','Core2Duo'
  $cpu=$cpu -replace 'Intel\(R\) Pentium\(R\)','Pentium'
  $cpu=$cpu -replace 'Intel\(R\) Core\(TM\)','Core'
  $cpu=$cpu -replace 'Intel\(R\) Celeron\(R\)','Celeron'
  $cpu=$cpu -replace 'Intel\(R\) Xeon\(R\)','Xeon'
  $cpu=$cpu -replace 'Pentium\(R\) Dual-Core','Pentium'
  $cpu=$cpu -replace ' with Radeon\(tm\) HD Graphics',''
  $cpu=$cpu -replace ' with Radeon Vega Mobile Gfx',''
  $cpu=$cpu -replace ' with Radeon Vega Graphics',''
  $cpu=$cpu -replace ' @ ',' '
  if ("$cpu" -ne ""){
    $memModule=((Get-WmiObject -Class CIM_PhysicalMemory -ComputerName $compAdr).Capacity | ForEach {$mem=[int]($_*10/1073741824)/10; if($mem -ge 0.5){$mem; $memSum=$memSum+$mem}}) -join ' '
    $sys=Get-WmiObject -Class CIM_ComputerSystem -ComputerName $compAdr
    $model=$sys.model
    $model=("$model").Trim()
    $model=$model -replace 'System Product Name','Noname'
    $model=$model -replace 'To be filled by O.E.M.','Noname'
    $model=$model -replace 'VMware Virtual Platform','VMware'
    $cores=$sys.NumberOfLogicalProcessors
    $compName=$sys.Name+$(if($sys.Domain){"."+$sys.Domain})
    $hdd=""; Get-WmiObject -Class CIM_diskdrive -ComputerName $compAdr | ForEach {if($_.Size -gt 0){$hdd+=[string]($_.Model+" "+[int]($_.Size / (1000000000)))+"GB`r`n"}}
    Output "`r`n    $(addSp $compName 23) $ip`r`n-------------------------------------------------------`r`n$(addSp "CPU" 15) :  $cpu($cores core) `r`n$(addSp "Memory" 15) :  $memModule (Sum:$memSum`GB) `r`n$(addSp "Manufacturer" 15) :  $model"
    $(if($hst){Output " ("; Output "$hst" "MediumVioletRed"; Output ")"}); Output "`r`n"
    if($hdd){Output "`r`nHard Disk Drive:"; Output "`r`n$hdd" "DarkBlue"}
  }
}


Sham 19-11-2024 11:52 3033287

серийник ОСи или материнской платы?

rafka 19-11-2024 12:02 3033288

Цитата:

Цитата Sham
серийник ОСи или материнской платы? »

серийник компьютера

Sham 19-11-2024 14:23 3033292

Там же всё из классов WMI берётся. Например get-ciminstance win32_baseboard даёт по материнке данные, в т.ч SerialNumber. Сериальник системы есть в классе win32_operatingsystem. У вас можно просто засунуть туда что-то типа $((get-ciminstance win32_baseboard).serialnumber)
п.с. пробуйте ещё классы win32_bios и win32_systemenclosure - там тоже какие-то серийники.

rafka 19-11-2024 15:28 3033293

Цитата:

Цитата Sham
Там же всё из классов WMI берётся. Например get-ciminstance win32_baseboard даёт по материнке данные, в т.ч SerialNumber. Сериальник системы есть в классе win32_operatingsystem. У вас можно просто засунуть туда что-то типа $((get-ciminstance win32_baseboard).serialnumber)
п.с. пробуйте ещё классы win32_bios и win32_systemenclosure - там тоже какие-то серийники. »

Спасибо Большое!

rafka 19-11-2024 16:27 3033296

Цитата:

Цитата Sham
Там же всё из классов WMI берётся. Например get-ciminstance win32_baseboard даёт по материнке данные, в т.ч SerialNumber. Сериальник системы есть в классе win32_operatingsystem. У вас можно просто засунуть туда что-то типа $((get-ciminstance win32_baseboard).serialnumber)
п.с. пробуйте ещё классы win32_bios и win32_systemenclosure - там тоже какие-то серийники. »

еще один вопрос. А если хочу получить серийный номер удалённого компьютера ? тогда как ?

rafka 19-11-2024 23:00 3033315

Цитата:

Цитата rafka
еще один вопрос. А если хочу получить серийный номер удалённого компьютера ? тогда как ? »

сделал вот так $Serial=$(get-ciminstance win32_bios -ComputerName $compAdr).serialnumber и все заработал корректно.

Sham 20-11-2024 06:39 3033318

Get-WmiObject в последних версиях удалён, поэтому везде лучше заменить на Get-CimInstance

rafka 20-11-2024 08:54 3033324

Цитата:

Цитата rafka
сделал вот так $Serial=$(get-ciminstance win32_bios -ComputerName $compAdr).serialnumber и все заработал корректно. »

когда вот так локальный не показывает. а мне надо что бы локальный показывал по умолчанию а когда выбираю удалённую компьютер то показывал удалённую.
как граммотно это прописать?

Sham 20-11-2024 09:52 3033330

А в $compAdr наверное точка "." в случае локального компьютера? get-ciminstance видимо не понимает эту точку как локальный комп. Для него нужен $null (пустая переменная). Тогда варианта два: 1. заменить get-ciminstance на старый get-wmiobject, либо 2. во всём скрипте заменить get-wmiobject на get-ciminstance и заменить везде точку "." на $null в объявлениях переменной $compAdr во всём скрипте, где подразумевается локальный комп.

rafka 20-11-2024 10:50 3033335

Цитата:

Цитата Sham
А в $compAdr наверное точка "." в случае локального компьютера? get-ciminstance видимо не понимает эту точку как локальный комп. Для него нужен $null (пустая переменная). Тогда варианта два: 1. заменить get-ciminstance на старый get-wmiobject, либо 2. во всём скрипте заменить get-wmiobject на get-ciminstance и заменить везде точку "." на $null в объявлениях переменной $compAdr во всём скрипте, где подразумевается локальный комп. »

get-wmiobject -ом работает корректно.

Imation 20-11-2024 11:21 3033338

получается что с таким путем можно заполучит и мак адресс. только мне кажется он будет видеть все мак адреса. А как филтировать что бы показывал только eth и wifi?

Код:

Get-WmiObject Win32_NetworkAdapterConfiguration -ComputerName $compAdr).MACAddress

Sham 20-11-2024 11:27 3033340

Цитата:

Цитата Sham
А в $compAdr наверное точка "." в случае локального компьютера? »

нет, там не точка, а %computername% (имя компьютера), и быстро заменить на get-ciminstance не получится, поскольку $compAdr ещё используется в других командах, типа ping. Если там будет пустота, то будут ошибки.

Sham 20-11-2024 11:47 3033342

Цитата:

Цитата Imation
что бы показывал только eth и wifi? »

Там нет такого. Только косвенно по названию, описанию, по наличию IP, DHCP и т.д. Либо через базы мак-адресов, где определяются производители железа.

rafka 20-11-2024 11:47 3033343

Цитата:

Цитата Imation
Get-WmiObject Win32_NetworkAdapterConfiguration -ComputerName $compAdr).MACAddress »

попробуйте так.
Код:

       
(Get-WmiObject -ComputerName $compAdr Win32_NetworkAdapterConfiguration  | where {$_.Description -like '*Ethernet*'}).MACAddress
(Get-WmiObject -ComputerName $compAdr Win32_NetworkAdapterConfiguration  | where {$_.Description -like '*Wireless*'}).MACAddress


Sham 20-11-2024 11:49 3033344

Цитата:

Цитата rafka
$_.Description -like '*Ethernet*'} »

не везде в описании это явно указывается.

Imation 20-11-2024 11:49 3033346

Цитата:

Цитата rafka
попробуйте так. »

Wifi показывает а вот *Ethernet* нет

Цитата:

Цитата Sham
Там нет такого. Только косвенно по названию, описанию, по наличию IP, DHCP и т.д. Либо через базы мак-адресов, где определяются производители железа. »

а если 3-4 виртуальных сети (адаптеры) как указать что бы он показывал именно физических ?

rafka 20-11-2024 11:57 3033348

Цитата:

Цитата Sham
не везде в описании это явно указывается. »

если ему нужен локальный то можно и так
Код:


(Get-NetAdapter -Name "Local Area Connection").MacAddress


Imation 20-11-2024 12:03 3033349

Цитата:

Цитата rafka
если ему нужен локальный то можно и так »

Локально не плохо , а было бы здорово если через сеть :-)

rafka 20-11-2024 12:11 3033350

Цитата:

Цитата Imation
Локально не плохо , а было бы здорово если через сеть :-) »

тогда как выход можете так . Но настолько корректно это не знаю.
Код:

Get-WmiObject -ComputerName $compAdr Win32_NetworkAdapterConfiguration  | where {$_.Description -like '*Realtek*'}).MACAddress
Цитата:

Цитата rafka
Get-WmiObject -ComputerName $compAdr Win32_NetworkAdapterConfiguration | where {$_.Description -like '*Realtek*'}).MACAddress »

только это будет работать с сетевыми картами *Realtek*

Sham 20-11-2024 14:45 3033366

Цитата:

Цитата Imation
а если 3-4 виртуальных сети (адаптеры) как указать что бы он показывал именно физических ? »

полный список смотрите, есть ли за что зацепиться. В основном по ключевым словам в описании ищут, но гарантии нет. Драйвер обновится и изменит описание например.
Код:

get-ciminstance Win32_NetworkAdapterConfiguration -Property *

DJ Mogarych 20-11-2024 17:20 3033375

Цитата:

Цитата Imation
как указать что бы он показывал именно физических »

Код:

Get-NetAdapter -Physical


Время: 00:02.

Время: 00:02.
© OSzone.net 2001-