通过使用 Powershell WMI 从 csv 文件评估 CPU 日期来获取计算机制造日期
Get Computer Manufacture Date by evaluate CPU Dates from a csv file using Powershell WMI
我正在尝试通过查找包含处理器日期列表的 csv 文件并在计算机的处理器日期与 csv 列表中填充的日期匹配时返回日期来输出计算机制造日期。我正在尝试通过使用 import-csv cmdlet 来实现这一点,该 cmdlet 将从 excel sheet 中导入一个 csv 文件,其中包含预填充的处理器型号及其日期 objects。下面发布了此 CSV 文件的示例。包含此命令的 powershell 脚本随后将根据 header 行进行查找和比较,然后将根据匹配项或条件是否为真提供正确的日期。
到目前为止我的代码 returns 所有发布日期而不是匹配日期。这不是预期的结果。
这是我的脚本示例
$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;;;;;;;;
我期待 "The Manufacture Date is : Q2 2018" ..一行。
我们将不胜感激一些代码片段或代码想法,以准确获得预期的输出。
运行 下面的内容很容易让你得到你想要的结果。这不是最好的方法,但肯定是一种方法。
$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)"
这里有一个稍微不同的方法。 [grin] 它使用查找 table 使事情变得更加明显 - 并且比使用过滤器快一点点。
# 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 文件并在计算机的处理器日期与 csv 列表中填充的日期匹配时返回日期来输出计算机制造日期。我正在尝试通过使用 import-csv cmdlet 来实现这一点,该 cmdlet 将从 excel sheet 中导入一个 csv 文件,其中包含预填充的处理器型号及其日期 objects。下面发布了此 CSV 文件的示例。包含此命令的 powershell 脚本随后将根据 header 行进行查找和比较,然后将根据匹配项或条件是否为真提供正确的日期。
到目前为止我的代码 returns 所有发布日期而不是匹配日期。这不是预期的结果。
这是我的脚本示例
$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;;;;;;;;
我期待 "The Manufacture Date is : Q2 2018" ..一行。 我们将不胜感激一些代码片段或代码想法,以准确获得预期的输出。
运行 下面的内容很容易让你得到你想要的结果。这不是最好的方法,但肯定是一种方法。
$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)"
这里有一个稍微不同的方法。 [grin] 它使用查找 table 使事情变得更加明显 - 并且比使用过滤器快一点点。
# 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 ].