Powershell 4.0阵列构建和导入/导出CSV

时间:2015-01-22 17:30:01

标签: arrays powershell csv

我尝试导入csv文件,针对csv文件中的计算机名运行序列号搜索,并将计算机名称和序列号组合导出到新的csv文件。这就是我迄今为止所做的事情并没有像我预期的那样发挥作用(对于PowerShell来说还是新手)。

$csv = Import-CSV "C:\Computer_Name_CSV_Generator.csv"
$resultsarray = @()

$wmiresults = New-Object PSCustomObject
$wmiresults | Add-Member -type NoteProperty -Name Computer_Name -Value   $Computer_Name.Computer_Name
$wmiresults | Add-Member -type NoteProperty -Name SerialNumber -Value $getwmiSN   

Foreach ($Computer_Name in $csv)
{
If ($Computer_Name.Computer_Name -ne 0)
    {
    $getwmiSN = Get-WmiObject -ComputerName $Computer_Name.Computer_Name win32_bios | Select-object SerialNumber
    $wmiresults.Computer_Name = $Computer_Name.Computer_Name
    $wmiresults.SerialNumber = $getwmiSN.SerialNumber
    }
$resultsarray += $wmiresults
}
$resultsarray | Export-Csv "C:\ComputerSerialNumbers.csv" -NoTypeInformation -Encoding UTF8

每次在foreach结束时更新数组时,所有数据都会被修改为最后一个机器/序列号的数据通过foreach运行。当它被导出时,我会收到一个完全由最后一个计算机名和序列号组成的csv,但输入的数量恰好与导入csv相同。

If语句用于处理原始csv中导致0的空白行。

1 个答案:

答案 0 :(得分:1)

您需要为每台计算机创建一个对象,而不是一遍又一遍地修改该对象。尝试:

$csv = Import-CSV "C:\Computer_Name_CSV_Generator.csv"
$resultsarray = @()


Foreach ($Computer_Name in $csv)
{
    If ($Computer_Name.Computer_Name -ne 0)
    {

        $getwmiSN = Get-WmiObject -ComputerName $Computer_Name.Computer_Name win32_bios

        $wmiresults = New-Object PSCustomObject -Property @{
            "Computer_Name" = $Computer_Name.Computer_Name
            "SerialNumber" = $getwmiSN.SerialNumber
        }

        $resultsarray += $wmiresults

    }

}

$resultsarray | Export-Csv "C:\ComputerSerialNumbers.csv" -NoTypeInformation -Encoding UTF8

您还可以简化它以使用PowerShell中的管道支持。这样你就可以将它缩短为:

Import-CSV "C:\Computer_Name_CSV_Generator.csv" |
ForEach-Object {

    if($_.Computer_Name -ne 0) {
        $getwmiSN = Get-WmiObject -ComputerName $_.Computer_Name win32_bios

        New-Object PSCustomObject -Property @{
                "Computer_Name" = $_.Computer_Name
                "SerialNumber" = $getwmiSN.SerialNumber
        }   
    }

} | Export-Csv "C:\ComputerSerialNumbers.csv" -NoTypeInformation -Encoding UTF8