如何为每个for循环项分配变量名 - Powershell

时间:2014-10-08 14:40:28

标签: windows powershell wmi

我希望能够为计算机迭代一系列监视器(通过WMI拉取),然后为每个监视器分配自己的值,这样我就可以将结果输出到csv,每个监视器,mfg, date,sn在它自己​​的列上。

例如:

Monitor 1 MFG     Monitor 1 SN     Monitor 2 MFG     Monitor 2 SN
   Dell                12345          HP                05156 


我知道如何输出到csv,只是在分配每个自己的变量时遇到问题。

$Monitors = Get-WmiObject -Namespace root\wmi -Class wmiMonitorID -ComputerName "PC"
$Monitors | % {$i=0} {"$_";$i++}

这可以获取机器上每个监视器的每个实例名称,但是我如何为每个监视器获取串口等?

我尝试使用$ _.SerialNumberID将其拉出来,但我无法弄清楚

1 个答案:

答案 0 :(得分:2)

嗯......这是你怎么做的。看起来wmi中某些内容的数据需要转换为可读。

$Monitors = Get-WmiObject -Namespace root\wmi -Class wmiMonitorID    
$obj = Foreach ($Monitor in $Monitors)
{
    [pscustomobject] @{
    'MonitorMFG' = [char[]]$Monitor.ManufacturerName -join ''
    'MonitorSerial' = [char[]]$monitor.SerialNumberID -join ''
    'MonitorMFGDate' = $Monitor.YearOfManufacture
    }
}
$obj
$obj | export-csv 

编辑...更符合您想要的格式的替代方案......我认为上述内容虽然更好。

$Monitors = Get-WmiObject -Namespace root\wmi -Class wmiMonitorID
$i = 1
$obj = new-object -type psobject
Foreach ($Monitor in $Monitors)
    {
    $obj | add-member -Name ("Monitor$i" +"MFG") -Value ([char[]]$Monitor.ManufacturerName -join '') -MemberType NoteProperty -Force
    $obj | add-member -Name ("Monitor$i" + "Serial") -Value ([char[]]$monitor.SerialNumberID -join '') -MemberType NoteProperty -Force
    $obj | add-member -Name ("Monitor$i" + "MFGDate") -Value ($Monitor.YearOfManufacture) -MemberType NoteProperty -Force    
    $i++   
    }
$obj
$obj | export-csv