我试图模仿我的自定义项目文件作为新的PS驱动器。我正在尝试创建自NavigationCmdletProvider派生的自定义Powershell Provider。我已经重写了PSDriveInfo来读取并包含来自文件的项目,并且文件路径位于PSDriveInfo的根目录中。Powershell提供程序 - GetItem路径错误 - 自定义文件作为驱动器
我无法正确覆盖GetItem。我想要做的是使用GetNamesFromPath(path, out tableName, out rowNumber)
方法。由于我的自定义项目基本上是数据集,我想使用tableName来获取DataRow的ID的DataTable和rowNumber。
问题是我得到“路径不存在”类错误。它不会进入重写的方法。我错过了什么可以重写吗?文件路径并不存在,但我只需要处理路径并使用WriteItemObject和我想要的对象返回,而不检查它是否是有效的路径。
编辑1: 我注意到的一件事是它永远不会进入GetItem
,因此进入IsValidPath
。当我调试和使用断点时,首先我加载驱动器,然后将Set-Location
加载到驱动器,调用IsItemContainer
(必须重写Set-Location
才能工作)。
GetItem
和IsValidPath
根本不会被调用,就好像它在调用覆盖方法之前检查有效路径一样。 NavigationCmdletProvider
可以使用不存在的路径(文件本身除外),只能使用手动处理路径的字符串?
我怀疑这件事很简单,我错过了。但它并没有解决问题。我重写了'IsValidPath'方法总是返回true并且改变'GetItem'总是返回同一个表,只是为了看看它是否工作。仍然是同样的错误“Get-Item:无法找到路径'MyDrive:\ myName',因为它不存在。” 我注意到的一件事是它永远不会进入'GetItem',因此进入'IsValidPath'。当我调试和使用断点时,首先加载驱动器,然后将'Set-Location'加载到驱动器,调用IsItemContainer'。不调用“GetItem”和/或“IsValidPath”。 –
我经历了一段时间以前写过的提供程序,试着重写'ItemExists'。 –
是的,它没有被正确覆盖,只在某些情况下工作。我应该看到,但我受够了。 Thx –