通过使用Powershell WMI从csv文件计算CPU日期来获取计算机制造日期

通过使用Powershell WMI从csv文件计算CPU日期来获取计算机制造日期,powershell,csv,cpu,get-wmiobject,Powershell,Csv,Cpu,Get Wmiobject,我试图通过查找带有处理器日期列表的csv文件并返回日期(如果计算机的处理器日期与csv列表中填充的日期匹配)来输出计算机制造日期。我试图通过使用import-csv cmdlet来实现这一点,该cmdlet将从带有预填充处理器模型及其日期对象的excel工作表中导入csv文件。下面发布了此CSV文件的示例。包含此命令的powershell脚本将根据标题行进行查找和比较,然后根据匹配或条件是否满足true提供正确的日期 到目前为止,我的代码返回所有发布日期,而不是匹配的日期。这不是预期的结果 这是

我试图通过查找带有处理器日期列表的csv文件并返回日期(如果计算机的处理器日期与csv列表中填充的日期匹配)来输出计算机制造日期。我试图通过使用import-csv cmdlet来实现这一点,该cmdlet将从带有预填充处理器模型及其日期对象的excel工作表中导入csv文件。下面发布了此CSV文件的示例。包含此命令的powershell脚本将根据标题行进行查找和比较,然后根据匹配或条件是否满足true提供正确的日期

到目前为止,我的代码返回所有发布日期,而不是匹配的日期。这不是预期的结果

这是我的脚本示例

$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}
下面是我的导入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;;;;;;;;
我希望生产日期是:2018年第二季度……一条生产线。
一些代码片段或代码想法,以获得准确的预期输出,我们将不胜感激。

运行下面的程序将很容易得到您想要的结果。这不是最好的方法,但肯定是一种方法


这里有一个稍微不同的方法。[grin]它使用一个查找表来让事情变得更加明显,而且比使用过滤器要快一点

# 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 ].

经过测试,工作正常。在填充CSV后,我注意到一件事,那就是我必须复制计算机上的确切CPU名称,然后才能正确读取。这件事的缺点是,我不想让每个人的计算机都与我一起检查@他们喜欢的速度是多少ghz在我的情况下@1.9 ghz有没有一种方法,我可以通过挑选重要的字符串,例如处理器名称中的i7-8086K,然后忽略,然后将其余字符串作为匹配?删除。参考下面的内容。我还考虑了一个else条件,以防硬件在哈希表中找不到匹配项。否则我现在只能将就一下了。如果我能匹配英特尔网站->上的这种格式就好了。IntelR CoreTM i7-8086K处理器;2018年第二季度或与我电脑上的内容相同的时间->。IntelR CoreTM i7-8650U CPU@1.90GHz;2017年第三季度,我可以与这款i7-8660U相匹配,去掉其他部件;问题22019@johnzuh-只有几种方法可以匹配CIM/WMI调用和查找表中存在的文本。我使用了CIM调用返回的全部内容。您可以调用Intel站点,从中构建一个表,然后使用$Keys-match$CPU\u Info获取要在哈希表调用中使用的密钥。您可能希望简单地将CIM CPU名称信息构建到一个表中,并让低级技术人员手动输入发布日期信息。[露齿而笑]这主要是一种一次性操作的情况,用手操作可能会更快。[叹气…]我确实在空格上拆分了字符串,删除了空格之前和之后的所有字符,只使用[2]元素返回特定的模型,例如$CPU_Model=$CPU_Name.Split[2]返回i7-8650U,然后将其与表中的相应日期匹配。有点即兴发挥我想在这里实现的功能,因此我不必匹配CIM返回的整个IntelR CoreTM i7-8650U CPU@1.90GHz。我也从你建议的方法中得到了提示。
The release date for [ AMD Phenom(tm) II X4 945 Processor ] is [ Q4 2009 ].