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