I'm trying to emulate my custom project file as new PS Drive. I am trying to create my custom Powershell Provider that is derived from NavigationCmdletProvider. I have overridden PSDriveInfo to read and contain the project from the file and filepath is in the root of PSDriveInfo.
I can't override GetItem properly. What I want to do is use GetNamesFromPath(path, out tableName, out rowNumber)
method. Since my custom project is basically dataset, I would like to use tableName to get the DataTable and rowNumber for ID of DataRow.
The problem is that I get the "path doesn't exist" kind of error. It doesn't event get into the overridden method. Am I missing something to override? The filepath doesn't exist really, but I simply need to handle the path and use WriteItemObject with what I want as object(s) returned, without checking is it valid path.
Edit 1:
One thing I noticed is that it never gets into GetItem
and therefore into IsValidPath
. When I debug and use breakpoints, first I load the drive and then Set-Location
to the drive, IsItemContainer
is called (it has to be overridden for Set-Location
to work).
GetItem
and IsValidPath
are not called at all, as if it checks for valid path before calling overridden method. Can NavigationCmdletProvider
work with non-existing paths (except for the file itself), just work with strings that will manually be handled as paths would?
Make sure you override the IsValidPath
and ItemExists
methods:
protected override bool IsValidPath(string path)
{
return true;
}
protected override bool ItemExists(string path)
{
return true;
}