【问题标题】:Not able to format output as CSV [duplicate]无法将输出格式化为 CSV [重复]
【发布时间】:2019-05-15 15:25:21
【问题描述】:

无法使用echo 函数将 PS 输出转换为 CSV 格式。我需要收集有关多台服务器的硬件信息并从 Internet 获取此脚本。我对其进行了修改以仅收集必要的信息,例如计算机名称、硬盘空间、CPU 详细信息和 RAM。

下面是我的代码:

$ArrComputers = "PC17"
Clear-Host
foreach ($Computer in $ArrComputers) {
    $computerSystemRam = Get-WmiObject Win32_ComputerSystem -Computer $Computer |
                         select @{n="Ram";e={[math]::Round($_.TotalPhysicalMemory/1GB,2)}} |
                         FT -HideTableHeaders -AutoSize
    $computerCPU = Get-WmiObject Win32_Processor -Computer $Computer |
                   select Name |
                   FT -HideTableHeaders
    $computerCPUCores = Get-WmiObject Win32_Processor -Computer $Computer |
                        select NumberOfLogicalProcessors |
                        FT -HideTableHeaders -AutoSize 
    $computerC = Get-WmiObject -Class Win32_LogicalDisk -Filter "DeviceID= 'C:'" -ComputerName $Computer |
                 select @{n="Size";e={[math]::Round($_.Size/1GB,2)}} |
                 FT -HideTableHeaders -AutoSize 
    $computerD = Get-WmiObject -Class Win32_LogicalDisk -Filter "DeviceID= 'D:'" -ComputerName $Computer |
                 select @{n="Size";e={[math]::Round($_.Size/1GB,2)}} |
                 FT -HideTableHeaders -AutoSize 
    $computerE = Get-WmiObject -Class Win32_LogicalDisk -Filter "DeviceID= 'E:'" -ComputerName $Computer |
                 select @{n="Size";e={[math]::Round($_.Size/1GB,2)}} |
                 FT -HideTableHeaders -AutoSize 
    echo $computer,$computerC,$computerD,$computerE,$computerSystemRam,$computerCPU,$computerCPUCores
}

我的输出是

PC17 99.9 12 537.11 15.98 Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz 12

我需要的是将此输出作为逗号分隔值,如下所示

PC17,99.9,12,537.11,15.98,Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz,12

以便我可以在 Excel 中打开它。请让我知道这里的问题是什么?或任何其他替代解决方案,以便将输出作为 .csv。

【问题讨论】:

  • 不需要回显。只需使用 "$computer,$computerC,$computerD,$computerE,$computerSystemRam,$computerCPU,$computerCPUCores"
  • 如果您想将其转换为.csv 文件,也不要使用 FT (Format-Table)。
  • 最后(ForEach之后)使用ConvertTo-Csv

标签: powershell export-to-csv


【解决方案1】:

删除Format-Table,使用ExpandProperty并从数组中选择正确的属性,

另外,我使用-f 来格式化 csv,看看区别:

foreach ($Computer in $ArrComputers) 
{
    $computerSystemRam = get-wmiobject Win32_ComputerSystem -Computer $Computer | select @{n="Ram";e={[math]::Round($_.TotalPhysicalMemory/1GB,2)}}
    $computerCPU = get-wmiobject Win32_Processor -Computer $Computer | select -ExpandProperty Name
    $computerCPUCores = get-wmiobject Win32_Processor -Computer $Computer | select -ExpandProperty NumberOfLogicalProcessors
    $computerC = Get-WmiObject -Class Win32_LogicalDisk -Filter "DeviceID= 'C:'" -ComputerName $Computer | select @{n="Size";e={[math]::Round($_.Size/1GB,2)}}
    $computerD = Get-WmiObject -Class Win32_LogicalDisk -Filter "DeviceID= 'D:'" -ComputerName $Computer | select @{n="Size";e={[math]::Round($_.Size/1GB,2)}}
    $computerE = Get-WmiObject -Class Win32_LogicalDisk -Filter "DeviceID= 'E:'" -ComputerName $Computer | select @{n="Size";e={[math]::Round($_.Size/1GB,2)}}
    "{0},{1},{2},{3},{4},{5},{6}" -f $computer,$computerC.Size,$computerD.Size,$computerE.Size,$computerSystemRam.Ram,$computerCPU,$computerCPUCores
}

【讨论】:

  • 这行得通! ,但是当我在循环中再给出一个计算机名时,只有第一个被读取。
  • 已修复,立即尝试...删除了return
  • 是的,现在可以了!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-11
  • 2019-05-14
  • 1970-01-01
  • 2018-05-02
  • 1970-01-01
相关资源
最近更新 更多