2012-08-03 2 views
2

C#에서 사용자가 폴더 유형 디렉토리의 항목을 관리 할 수있게 해주는 사용자 정의 powershell 공급자를 만들려고합니다. 사용자가 cd -> files/folder에 있어야합니다. 아이 항목 등을보고 조작 할 수 있습니다. 내 문제는 myAcme :/any_path_here_of_valid_item에 내 위치를 설정하자마자 루트 디렉토리로 이동할 수 있다는 것입니다. 아래에 표시된대로 오류가 발생합니다. 이 경로에서 아이템을 얻을 수 있기 때문에 이상합니다. 내가 않을거야항목 사용자 정의 ContainerCmdletProvider에 대한 위치 설정

PS my****:\> cd myAcme:/ 
PS myAcme:\> get-item /files/folders/**** 
<Removed so you don' get hit by a wall of text but this displays the items info fine> 
PS myAcme:\> cd myAcme:/files/folders/**** 
Set-Location : Cannot find path 'myAcme:/files/folders/****' because it does not exist. 
At line:1 char:3 
+ cd <<<< myAcme:/files/folders/**** 
    + CategoryInfo   : ObjectNotFound: (myAcme:/files/folders/****:String) [Set-Location], ItemNotFoundException 
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.SetLocationCommand 

내가 여기서 뭔가를 missunderstanding 아니면 (내가 자식 항목을 얻기 위해 해당 항목에 내 위치를 설정하기 위해 노력하고있어) 항목의 위치로 위치를 설정하지 않을 수 있습니까 여기에 어떤 코드라도 표시 할 수 있습니다. containercmdletprovider의 개념을 이해하지 못한 것 같습니다.

EDIT 디버거에 추가하는 것을 잊어 버렸습니다. ItemExists가 명령을 실행하면 true를 반환합니다. cd myAcme :/파일/폴더/* *

+0

웨이크 웨이크? 아래 답변. – x0n

+1

죄송합니다. x0n은 큰 눈금>을 (를) 잊어 버렸습니다. << – user1573830

답변

1

ContainerCmdletProvider은 하위 폴더가없는 단순한 공급자에만 해당됩니다. 이러한 공급자의 예로는 PowerShell에서 function, envvariable 개의 드라이브가 있습니다. 이러한 공급자는 set-location, get-location (cd) 또는 중첩 된 경로의 개념을 지원하지 않습니다. 모든 것이 루트에 있어야하며 리프 노드 (예 : 파일) 여야합니다.

트리 구조를 사용하려면 NavigationCmdletProvider에서 상속해야합니다. 일반 PowerShell 스크립트를 사용하여 공급자를 매우 빠르게 프로토 타입화할 수있게 해주는 스크립팅 된 공급자 프레임 워크를 사용하면 개발하는 것이 더 쉽습니다. 몇 가지 예와 간단한 문서뿐 아니라 다운로드도 가능합니다. http://psprovider.codeplex.com/

행운을 비네!

관련 문제