using Alphaleonis.Win32.Filesystem; using System.Linq; using System.Management.Automation; namespace NTFSSecurity { [Cmdlet(VerbsCommon.Get, "DiskSpace")] [OutputType(typeof(DiskSpaceInfo))] public class GetDiskSpace : PSCmdlet { private string[] driveLetter; [Parameter(Position = 1)] [ValidatePattern("^[A-Za-z]:$")] public string[] DriveLetter { get { return driveLetter; } set { driveLetter = value; } } protected override void BeginProcessing() { base.BeginProcessing(); } protected override void ProcessRecord() { var volumes = Alphaleonis.Win32.Filesystem.Volume.EnumerateVolumes(); if (driveLetter == null) { driveLetter = volumes.ToArray(); } foreach (var letter in driveLetter) { var diskSpaceInfo = new DiskSpaceInfo(letter); try { diskSpaceInfo.Refresh(); if (diskSpaceInfo.TotalNumberOfBytes > 0) { this.WriteObject(diskSpaceInfo); } } catch { this.WriteWarning(string.Format("Could not get drive details for '{0}'", letter)); } } } protected override void EndProcessing() { base.EndProcessing(); } } }