using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Management.Automation; using System.Management.Automation.Provider; namespace Intel.Management.PSModule { class DriveInfo : PSDriveInfo { protected DriveContainer _root; ChildWriter _defaultWriter; public DriveInfo(PSDriveInfo driveInfo) : base(driveInfo) { } public DriveItem GetItemFromPath(string path) { return GetItemFromPath(path, null); } public virtual DriveItem GetItemFromPath(string path,DriveProvider provider) { char[] pathChar = { '\\', '/' }; string[] paths = path.Split(pathChar, StringSplitOptions.RemoveEmptyEntries); //find item in path DriveItem parent = _root; DriveItem foundItem = null; if (string.Compare(path, _root.Name, true) == 0 || string.Compare(path, "\\", true)==0 || string.Compare(path, "/", true)==0) { foundItem = _root; } if (_defaultWriter == null) _defaultWriter = new ChildWriter(); for (int i = 0; i < paths.Length; i++) { foundItem = null; if (parent is DriveContainer) { DriveContainer parentContainer = parent as DriveContainer; _defaultWriter.Provider = provider; _defaultWriter.SetParent(parentContainer); try { _defaultWriter.Flush(); } finally { _defaultWriter.SetParent(null); _defaultWriter.Provider = null; } DriveItem[] items = parentContainer.GetChildItems(); foreach (DriveItem childItem in items) { if (string.Compare(childItem.Name, paths[i], true) == 0) { foundItem = childItem; parent = foundItem; break; } } } if (foundItem == null)//path not correct { break; } } return foundItem; } public ChildWriter DefaultWriter { get { return _defaultWriter; } } } }