Получите дату изготовления компьютера, оценив даты процессора из CSV-файла с помощью Powershell WMI - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь вывести даты производства компьютеров путем поиска файла csv со списком дат процессора и возврата дат, если дата процессора компьютера совпадает с тем, что указано в списке csv. Я пытаюсь добиться этого с помощью командлета import-csv, который будет импортировать файл csv из листа Excel с предварительно заполненными моделями процессоров и их объектами Date. Образец этого CSV-файла размещен ниже. Сценарий powershell, который содержит эту команду, затем выполнит поиск и сравнение на основе строк заголовка, а затем предоставит правильную дату на основе соответствия или, если условие выполнено, истинно.

Мой код пока возвращает все Даты выпуска вместо совпадающей Даты. Что не является ожидаемым результатом.

Вот пример моего сценария

$OutModel = Get-WmiObject Win32_Processor | Select name

Import-Csv C:\date_source\manufacture_date.CSV -Delimiter ";"  | where {$_.Name -ne ""} | %{write-host The Manufacture Date is: $_.Release}

Вот пример моего файла import-csv

Model;Release;;;;;;;;

;;;;;;;;;

i7-8086K ;Q2 2018;;;;;;;;

i7-8700K;Q4 2017;;;;;;;;

i7-8700;Q4 2017;;;;;;;;

i5-8600K;Q4 2017;;;;;;;;

i5-8500;Q2 2018;;;;;;;;

i5-8400;Q4 2017;;;;;;;;

i3-8350K;Q4 2017;;;;;;;;

i3-8100;Q4 2017;;;;;;;;

Intel(R) Core(TM) i7-8650U CPU @ 1.90GHz;Q3 2017;;;;;;;;

i7-8550U;Q3 2017;;;;;;;;

i7-8750H;Q2 2018;;;;;;;;

i5-8350U;Q3 2017;;;;;;;;

i5-8300H;Q2 2018;;;;;;;;

i5-8250U;Q3 2017;;;;;;;;

i7-8665U;Q2 2019;;;;;;;;

i7-8565U;Q3 2018;;;;;;;;

i5-8365U;Q2 2019;;;;;;;;

i5-8265U;Q3 2018;;;;;;;;

i3-8145U;Q3 2018;;;;;;;;

Я ожидаю что-то вроде «Дата изготовления: Q2 2018» ... одна строка. Будут оценены некоторые фрагменты кода или идеи кода, чтобы получить точный, чтобы получить ожидаемый результат.

Ответы [ 2 ]

0 голосов
/ 11 июля 2019

вот немного другой способ сделать это.[ ухмылка ] он использует таблицу поиска, чтобы сделать вещи более наглядными - и чуть быстрее, чем при использовании фильтра.

# fake reading in a CSV file
#    in real life, use Import-CSV
$CPU_Data = @'
Model;ReleaseDate
i7-8086K;Q2 2018
i7-8700K;Q4 2017
i7-8700;Q4 2017
i5-8600K;Q4 2017
i5-8500;Q2 2018
i5-8400;Q4 2017
i3-8350K;Q4 2017
i3-8100;Q4 2017
Intel(R) Core(TM) i7-8650U CPU @ 1.90GHz;Q3 2017
i7-8550U;Q3 2017
i7-8750H;Q2 2018
i5-8350U;Q3 2017
AMD Phenom(tm) II X4 945 Processor;Q4 2009
'@ | ConvertFrom-Csv -Delimiter ';'

# build a lookup table
$CPU_ReleaseDateLookup = [hashtable]::new()
foreach ($CD_Item in $CPU_Data)
    {
    $CPU_ReleaseDateLookup.Add($CD_Item.Model, $CD_Item.ReleaseDate)
    }

# the CIM cmdlets are a tad faster than the WMI cmdlets - and are not deprecated
$CPU_Name = (Get-CimInstance -ClassName CIM_Processor).Name


'The release date for [ {0} ] is [ {1} ].' -f $CPU_Name, $CPU_ReleaseDateLookup[$CPU_Name]

вывод ...

The release date for [ AMD Phenom(tm) II X4 945 Processor ] is [ Q4 2009 ].
0 голосов
/ 11 июля 2019

Запуск ниже легко даст вам желаемый результат.Не лучший способ сделать это, но, конечно, способ .

$models = import-csv C:\temp\modeltest.csv -Delimiter ";" 
$CPU = $(((Get-WmiObject Win32_Processor | Select name) -split ' ')[2])
Write-Host "The Manufacture Date is : $(($models.Where({$_.Model -eq "$CPU"})).Release)"
...