Я хочу создать поставщика PowerShell, который будет работать как структура каталогов. Корень - это веб-адрес, который возвращает текстовый файл. Этот файл имеет список элементов. Когда каждый из этих элементов добавляется к концу исходного веб-адреса, я получаю другой файл с другим списком элементов. Это происходит рекурсивно, пока файл не возвращает какой-либо элемент. Таким образом, структура, как:Внештатная реализация поставщика Powershell
root: 1.2.3.4/test/ -> returns file0
file0: item1, item2, item3
1.2.3.4/test/item1 -> returns file1
1.2.3.4/test/item2 -> returns file2
1.2.3.4/test/item3 -> returns file3
file1: item4, item5
file2: item6
file3: <empty>
Поскольку я хочу создать навигацию, как структура, я расширил NavigationCmdletProvider
public class TESTProvider : NavigationCmdletProvider
Я могу создать новый PSDrive следующим образом:
PS c:\> New-PSDrive -Name dr1 -PSProvider TestProvider -Root http://1.2.3.4/v1
Name Used (GB) Free (GB) Provider Root CurrentLocation
---- --------- --------- -------- -------------------
dr1 TestProvider http://1.2.3.4/v1
Но когда я «cd» к этому приводу, я получаю ошибку:
PS c:\> cd dr1:
cd : Cannot find path 'dr1:\' because it does not exist.
At line:1 char:1
+ cd dr1:
+ ~~~~~~~~
+ CategoryInfo : ObjectNotFound: (dr1:\:String) [Set-Location], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.SetLocationCommand
Какой метод я должен реализовать/переопределить, чтобы показать приглашение как PS dr1:> когда я делаю cd dr1 :? (После этого я понял, что мне придется переопределить GetChildItems(string path, bool recurse)
, чтобы получить item1, item2, item3 в списке.)
Это не совсем ответ на ваш вопрос, но вы должны смотреть на https://github.com/beefarino/p2f/ или https://github.com/beefarino/simplex - они делают создание провайдера намного проще. –