Hi Folks,
I am trying to fetch the disk space details using Get-WmiObject Win32_volume cmdlet, however able to load the complete data into the powershell object "$CapacityDetails " but unable to load the data in csv format file properly (using Script 1) . I am looking only one header to be generated for first server, instead of having column header for each every server in the loop.
Is it possible to add the whole data using "$Datatable = New-Object System.Data.DataTable" and then insert final records to CSV please? (Tried with another script ( 2nd script), but unable to load the data to $Datatable and then to csv)
Script 1
$ServersFile ="D:\HealthCheck\Diskspace\servers.txt"
$Hosts = import-csv $ServersFile
foreach ($Hostname in $Hosts){
[decimal]$thresholdspace = 10
$CapacityDetails+=Get-WmiObject Win32_volume -ComputerName $Hostname.HostName | select SystemName,Name,
@{n='Size' ;e={"{0:n2}" -f ($_.capacity/1gb)}},
@{n='FreeSpace';e={"{0:n2}" -f ($_.freespace/1gb)}},
@{n='PercentFree';e={"{0:n2}" -f ($.freespace/$.capacity*100)}} |Where-Object { $.Name -ne 'P:\' -and $.Name -NotLike '*' -and $_.Size -ne '0.00' } |FT
}
$CapacityDetails | Export-Csv -Path D:\HealthCheck\Diskspace\Freespace.csv -NoTypeInformation
$CapacityDetails
===============================================================
SCRIPT 2
$ServersFile ="D:\HealthCheck\Diskspace\servers.txt"
$Hosts = import-csv $ServersFile
$Datatable = New-Object System.Data.DataTable
$Datatable.Columns.Add("HostName", "System.String")
$Datatable.Columns.Add("DiskName", "System.String")
$Datatable.Columns.Add("Size", "System.String")
$Datatable.Columns.Add("FreeSpace", "System.String")
$Datatable.Columns.Add("PercentFree", "System.String")
foreach ($Hostnames in $Hosts){
[decimal]$thresholdspace = 10
$DiskDetails=Get-WmiObject Win32_volume -ComputerName $Hostnames.HostName | select SystemName, Name,
@{n='Size' ;e={"{0:n2}" -f ($_.capacity/1gb)}},
@{n='FreeSpace';e={"{0:n2}" -f ($_.freespace/1gb)}},
@{n='PercentFree';e={"{0:n2}" -f ($.freespace/$.capacity*100)}} |Where-Object { $.Name -ne 'P:\' -and $.Name -NotLike '*' -and $_.Size -ne '0.00' } |FT
if($DiskDetails.Length -ne 0)
{
foreach($Disk in $DiskDetails)
{
$row = $Datatable.NewRow()
$row.HostName = $Disk.SystemName
$row.DiskName = $Disk.Name
$row.Size = $Disk.Size
$row.Freespace = $Disk.FreeSpace
$row.PercentFree = $Disk.PercentFree
$Datatable.Rows.Add($row)
}
}
}
$Datatable.Rows | Export-Csv -Path D:\HealthCheck\Diskspace\Freespace.csv #-NoTypeInformation
$Datatable.Rows
Thanks
Dathuraj Pasarge