安排从Powershell foreach循环输出到CSV
我正在编写一个powershell函数,它执行foreach循环。循环遍历主机文本文件列表中的每个服务器名称,然后为每个主机提取C上的可用空间,然后将其分配给变量 然后另一个循环再次遍历列表,获取主机名,然后将其添加到变量中 然后我有一个变量,它接受包含从循环中提取的数据的两个变量,并将其导出到CSV。它将正确的数据放入CSV,但我想以某种方式格式化它。当前csv输出为(例如,对于4个条目)“服务器1”“服务器2”“服务器3”“服务器4”“diskspacevalue1”“2”“3”“4”等 因此,我已经拥有了我需要的所有数据,但我需要对其进行排列,以便一个单元格具有服务器名称,然后它旁边的单元格具有相应的值 我有一种感觉,我应该创建对象或使用数组,但我想知道是否有什么东西可以添加,以实现基于我目前编写的脚本所需的格式安排从Powershell foreach循环输出到CSV,csv,powershell,foreach,Csv,Powershell,Foreach,我正在编写一个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[]”。有什么想法吗?