安排从Powershell foreach循环输出到CSV

安排从Powershell foreach循环输出到CSV,csv,powershell,foreach,Csv,Powershell,Foreach,我正在编写一个powershell函数,它执行foreach循环。循环遍历主机文本文件列表中的每个服务器名称,然后为每个主机提取C上的可用空间,然后将其分配给变量 然后另一个循环再次遍历列表,获取主机名,然后将其添加到变量中 然后我有一个变量,它接受包含从循环中提取的数据的两个变量,并将其导出到CSV。它将正确的数据放入CSV,但我想以某种方式格式化它。当前csv输出为(例如,对于4个条目)“服务器1”“服务器2”“服务器3”“服务器4”“diskspacevalue1”“2”“3”“4”等 因

我正在编写一个powershell函数,它执行foreach循环。循环遍历主机文本文件列表中的每个服务器名称,然后为每个主机提取C上的可用空间,然后将其分配给变量

然后另一个循环再次遍历列表,获取主机名,然后将其添加到变量中

然后我有一个变量,它接受包含从循环中提取的数据的两个变量,并将其导出到CSV。它将正确的数据放入CSV,但我想以某种方式格式化它。当前csv输出为(例如,对于4个条目)“服务器1”“服务器2”“服务器3”“服务器4”“diskspacevalue1”“2”“3”“4”等

因此,我已经拥有了我需要的所有数据,但我需要对其进行排列,以便一个单元格具有服务器名称,然后它旁边的单元格具有相应的值

我有一种感觉,我应该创建对象或使用数组,但我想知道是否有什么东西可以添加,以实现基于我目前编写的脚本所需的格式

function diskcheck {
    $freespace = Get-Content C:\temp2\DiskspaceProj\hosts.txt | Foreach-Object {
        Get-WmiObject win32_logicaldisk -Computername $_ -Filter "DeviceID='C:'" | select -ExpandProperty "FreeSpace"
    }
    $hostName = Get-Content C:\temp2\DiskspaceProj\hosts.txt | Foreach-Object {
        Get-WmiObject Win32_ComputerSystem -ComputerName $_ | Select -ExpandProperty "Name"
    }
    $output = "$hostname, $freespace" | echo > C:\temp2\DiskspaceProj\diskspace.csv
}
diskcheck

不要维护两个单独的数组-创建一个包含两个属性的对象数组:

function diskcheck 
{
    param(
        [string]$Path = 'C:\temp2\DiskspaceProj\hosts.txt'
    )

    Get-Content $Path |ForEach-Object {
        New-Object psobject -Property @{
            Hostname = Get-WmiObject Win32_ComputerSystem -ComputerName $_ |Select -ExpandProperty Name
            FreeSpace = Get-WmiObject win32_logicaldisk -Computername $_ -Filter "DeviceID='C:'" | select -ExpandProperty FreeSpace
        }
    }
}
然后使用
导出CSV
将列表导出到文件:

diskcheck |Select Hostname,FreeSpace |Export-Csv C:\diskspace_output.csv -NoTypeInformation

很好。然而,我在CSV中得到了一个奇怪的输出。值在每个单元格中显示为“System.Object[]”。有什么想法吗?