2015-07-10 52 views
0

下面的代碼輸出信息,如:出口計算機信息到CSV

System Information for: Localhost 

    Model   : {0} 
    Serial Number : {1} 
    Version  : {2} 
    Monitor Model : {3} 
    Monitor Serial : {4} 

如何導出爲CSV和具有格式在Excel中,如:

Name, Model, Serial Number, Version, Monitor Model, Monitor serial 

我想每個在自己的細胞中的價值。

代碼1:

$ArrComputers = "localhost" 
$OutputLog = ".\output.log" 
$NotRespondingLog = ".\notresponding.log" 
$ErrorActionPreference = "Stop" 
Clear-Host 

ForEach ($Computer in $ArrComputers) { 
    try { 
    $computerSystem = get-wmiobject Win32_ComputerSystem -Computer $Computer 
    $computerBIOS = get-wmiobject Win32_BIOS -Computer $Computer 
    $Version = Get-WmiObject -Namespace "Root\CIMv2" ` 
     -Query "Select * from Win32_ComputerSystemProduct" ` 
     -computer $computer | select -ExpandProperty version 
    $MonitorInfo = gwmi WmiMonitorID -Namespace root\wmi -computername $computer | 
     Select -last 1 @{n="Model"; e={[System.Text.Encoding]::ASCII.GetString($_.UserFriendlyName -ne 00)}}, 
     @{n="Serial Number";e={[System.Text.Encoding]::ASCII.GetString($_.SerialNumberID -ne 00)}} 
    } catch { 
    $Computer | Out-File -FilePath $NotRespondingLog -Append -Encoding UTF8 
    continue 
    } 

    $Header = "System Information for: {0}" -f $computerSystem.Name 

    write-host $Header -BackgroundColor DarkCyan 
    $Header | Out-File -FilePath $OutputLog -Append -Encoding UTF8 

    $Output = (@" 
    ------------------------------------------------------- 

    Model   : {0} 
    Serial Number : {1} 
    Version  : {2} 
    Monitor Model : {3} 
    Monitor Serial : {4} 

    ------------------------------------------------------- 

"@) -f -join $computerSystem.Model, $computerBIOS.SerialNumber, $Version, ` 
    $MonitorInfo.Model, $MonitorInfo."Serial Number" 

    Write-Host $Output 
    $Output | Out-File -FilePath $OutputLog -Append -Encoding UTF8 
} 

回答

0

刪除格式字符串,並簡單地將數據導出爲CSV:

$data = ForEach ($Computer in $ArrComputers) { 
    try { 
    ... 
    } catch { 
    ... 
    } 

    $props = [ordered]@{ 
    'Name'   = $computerSystem.Name 
    'Model'   = $computerSystem.Model 
    'Serial Number' = $computerBIOS.SerialNumber 
    'Version'  = $Version 
    'Monitor Model' = $MonitorInfo.Model 
    'Monitor Serial' = $MonitorInfo."Serial Number" 
    } 
    New-Object -Type PSCustomObject -Property $props 
} 

$data | Export-Csv 'C:\path\to\output.csv' -NoType 

New-Object聲明是必需的,因爲Export-Csv出口對象列表的屬性作爲CSV文件的字段。

請注意,Excel對於CSV接受的內容比較特別。文件必須必須以逗號分隔(無論在系統的區域設置中配置了什麼字段分隔符)。

+0

嘿它說無效空管元素是不允許的? –

+0

@NavPal啊,我的壞。我忽略了你在那裏有一個'foreach'循環,而不是'ForEach-Object'循環,所以你不能直接將輸出送入管道。查看更新的答案。 –

+0

你的天才!有效!感謝你的幫助 :) –