Earlier this morning I posted some code that will extract hard drive information from other clients on your network. I got this idea from a user on the LinkedIn group PowerShell Power Users. His request was for a CSV file where my code sent objects into the pipeline that would not translate well into a CSV. Below is the code that will convert the output of that cmdlet into a CSV.
To use this code:
- Copy the Get-HDSizeInfo code from my previous post into the PowerShell ISE.
- Paste the code below directly under the Get-HDSizeInfo code
- On line 81, provide the names of the clients that you want to pull the hard drive information from.
- On line 82, update the Path parameter to where you want the output file to be.
- On line 82, adjust MaxDrives to the highest number of drives you expect any 1 client to report. It defaults at 3.
- Run the script.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 80 81 82 83 84 85 86 | Function ConvertTo-HDInfoCSV { Param ( 
 [parameter(Mandatory=$true, ValueFromPipeline=$true)] $HDInfo, 
 [parameter(Mandatory=$true)] $Path = "C:\Temp\Out.CSV", 
 [Int] $MaxDrives = 3 ) 
 BEGIN { # Create the first row of the CSV file. # If you anticipate more than 3 drives being returned, then add a new # Set of place holders for them. $DriveHolders = $Null For ($X=1;$X -le $MaxDrives; $X++) { $DriveHolders += "Drive_$X,SizeGB_$X,UsedGB_$X,FreeGB_$X," } $DriveHolders = $DriveHolders.Remove($DriveHolders.LastIndexOf(",")) 
 $Row1 = "ComputerName,$DriveHolders" $Row1 | Out-File -FilePath $Path } # END: BEGIN BLOCK PROCESS { ForEach ($HD in $HDInfo) { 
 # NULL out the output string $String = $Null 
 # Add the Computer name. $String += "$($HD.ComputerName)," 
 # Get all the hard drive information from the object. $Drives = $HD | Select-Object -ExpandProperty Drives | Sort-Object -Property Drive 
 # Cycle through the Hard Drives and add them to the Output. ForEach ($D in $Drives) { # This will add the Hard Drive information in the correct # order for the CSV. $String += "$($D.Drive)," $String += "$($D.SizeGB)," $String += "$($D.UsedGB)," $String += "$($D.FreeGB)," } 
 # Remove the last "," from the string. $String = $String.Remove($String.LastIndexOf(",")) $String | Out-File -FilePath $Path -Append 
 } 
 } # END: PROCESS BLOCK END {} 
 
 } # END: Function ConvertTo-HDInfoCSV 
 
 # Used the Get-HDSizeInfo code from yesterday to get hard drive information. # Just past that code as the above the code above. Get-HDSizeInfo -ComputerName lon-dc1, lon-cl1, LON-ex1 -Fixed | Where Online -eq $True | ConvertTo-HDInfoCSV -Path "C:\Temp\Out.CSV" -MaxDrives 3 
 
 # You can import the CSV into Excel or import it into PowerShell with the line below. import-csv -Path "C:\Temp\Out.CSV" 
 
 
 | 
Comments