2016-12-07 63 views
0

我会尽力向大家解释我的问题。 目前我正在尝试获取计算机在我的域中的序列号和制造商名称的一些信息。逐行使用CSV导入行并将其作为csv再次导出

这是我目前使用的这个我的代码差距:

$computername = import-csv "C:\Daten\pc.csv" | select -ExpandProperty Computername 


ForEach ($computer in $computername) 
{ 
$Monitors = Get-WmiObject -ComputerName $computer -Namespace root\wmi -Class wmiMonitorID 

$i = 1 
$obj = new-object -type psobject 
Foreach ($Monitor in $Monitors) 
    { 
    $obj | add-member -Name ("Monitor$i" +" Modell") -Value ([char[]]$Monitor.UserFriendlyName -join '') -MemberType NoteProperty -Force 
    $obj | add-member -Name ("Monitor$i" +" Serial") -Value ([char[]]$Monitor.SerialNumberID -join '') -MemberType NoteProperty -Force 
    $obj | add-member -Name ("MAC-Addresse") -value $mac -MemberType NoteProperty -Force 
    $obj | add-member -Name ("Seriennummer PC") -value $seriennummer_pc -MemberType NoteProperty -Force 
    $obj | add-member -Name ("Modell PC") -value $modell_pc -MemberType NoteProperty -Force 
    $obj | Add-Member -Name ("Computername") -value $computer -MemberType NoteProperty -Force 
    $i++ 
    $obj | export-csv -path C:\Daten\test.csv 
}} 

我现在的问题是,出口工作,但只适用于我的进口-CSV的最后一行。我也已经使用Get-Content命令尝试过它。

这里是出口,CSV:

#TYPE System.Management.Automation.PSCustomObject 
"Monitor1 Modell","Monitor1 Serial","Monitor2 Modell","Monitor2 Serial","MAC-Addresse","Seriennummer PC","Modell PC","Computername" 
B22W-7 LED,"XYZ123459","B22W-7 LED","XYZ123457","00:00:00:00:00:00","XYZ123456","LIFE1337","COMPUTER2" 

将是真棒,如果你能帮助我这一点。

由于事先 罗宾

回答

0

问题,我看到了 创建for循环内的新对象。 在for循环外导出为CSV。 将所有$ obj放入一个数组中,将其导出。

可能的解决办法:

$computername = import-csv "C:\Daten\pc.csv" | select -ExpandProperty Computername 

$items = @() 
ForEach ($computer in $computername) 
{ 
    $Monitors = Get-WmiObject -ComputerName $computer -Namespace root\wmi -Class wmiMonitorID 

    $i = 1 
    Foreach ($Monitor in $Monitors) 
    { 
     $obj = new-object -type psobject 
     $obj | add-member -Name ("Monitor$i" +" Modell") -Value ([char[]]$Monitor.UserFriendlyName -join '') -MemberType NoteProperty -Force 
     $obj | add-member -Name ("Monitor$i" +" Serial") -Value ([char[]]$Monitor.SerialNumberID -join '') -MemberType NoteProperty -Force 
     $obj | add-member -Name ("MAC-Addresse") -value $mac -MemberType NoteProperty -Force 
     $obj | add-member -Name ("Seriennummer PC") -value $seriennummer_pc -MemberType NoteProperty -Force 
     $obj | add-member -Name ("Modell PC") -value $modell_pc -MemberType NoteProperty -Force 
     $obj | Add-Member -Name ("Computername") -value $computer -MemberType NoteProperty -Force 
     $i++ 
     $items += $obj 
    } 
} 

$items | export-csv -path C:\Daten\test.csv 
+0

我已经重写代码与您的解决方案。你可以看看它为什么不能像预期那样工作吗?请参阅评论。提前致谢!! – Robin

0

用下面的测试代码,您可以更轻松地解决这个问题。

import-csv "C:\Daten\pc.csv" ` 
| select -ExpandProperty Computername ` 
| ForEach-Object {Get-WmiObject -ComputerName $_ -Namespace root\wmi -Class wmiMonitorID ` 
| Select-Object @{Name = "Monitor Model"; Expression = {[char[]]$_.UserFriendlyName -join ''}}, 
       @{Name = "Monitor Serial"; Expression = {[char[]]$_.SerialNumberID -join ''}} } ` 
| Export-Csv -Path C:\Daten\test.csv 
0

我认为你可以用-Append参数解决你的问题。
所以出口会是这样:

$obj | export-csv -path C:\Daten\test.csv -Append 

这样你就不必移动出口以外的for循环。

0

感谢您的帮助。

我已将我的输出分离为两个CSV。这对我来说更容易。

我现在只有一个监控器从每台计算机显示,但至少两个相连这里的每台计算机上的问题......

看代码,请:

$items = @() 
ForEach ($computer in $computername) 
{ 
    $Monitors = Get-WmiObject -ComputerName $computer -Namespace root\wmi -Class wmiMonitorID 
$i = 1 
Foreach ($Monitor in $Monitors) 
{ 
    $obj = new-object -type psobject 
    $obj | Add-Member -Name ("Computername") -value $computer -MemberType NoteProperty -Force 
    $obj | add-member -Name ("Monitor$i" +" Modell") -Value ([char[]]$Monitor.UserFriendlyName -join '') -MemberType NoteProperty -Force 
    $obj | add-member -Name ("Monitor$i" +" Serial") -Value ([char[]]$Monitor.SerialNumberID -join '') -MemberType NoteProperty -Force 
    $i++ 
    $items += $obj 
} 
    $obj2 = New-Object -type psobject 
    $obj2 | Add-Member -Name ("Computername") -value $computer -MemberType NoteProperty -Force 
    $obj2 | add-member -Name ("MAC-Addresse") -value $mac -MemberType NoteProperty -Force 
    $obj2 | add-member -Name ("Seriennummer PC") -value $seriennummer_pc -MemberType NoteProperty -Force 
    $obj2 | add-member -Name ("Modell PC") -value $modell_pc -MemberType NoteProperty -Force 
    $obj2 | add-member -Name ("IP Addresse") -value $ipv4 -MemberType NoteProperty -Force 
} 

$items | export-csv -path C:\Daten\Inventur\Bildschirm.csv -Append 
$obj2 | export-csv -path C:\Daten\Inventur\Computer.csv -Append