2011-08-09 8 views
6

저는 PowerShell 공급자를 C#으로 작성하고 있습니다. 공급자는 드라이브와 같은 인터페이스를 통해 응용 프로그램 도메인 객체를 노출합니다. 예 :PowerShell 공급자에서 대시 데이터를 새로 고 칩니 까?

my:\Users\[email protected] 
my:\Customers\Marty 

이 데이터는 궁극적으로 데이터베이스에서 제공됩니다.

데이터를 데이터베이스로 이동해야 할 때와 캐싱해야 할 때 유용한 지침을 찾을 수 없었습니다. PowerShell은 ItemExists 및 GetChildNames와 같은 메서드를 여러 번 호출합니다. 종종 같은 명령을 반복적으로 사용합니다. 자동 완료를 위해 탭을 누르기 때문에 5 번이나 6 번 데이터베이스로 이동하는 것은 비실용적입니다. 내가 데이터를 새로 고칠 알 수 있도록

그러나 동시에

, 명령 프롬프트에서 사용자로, 내가 입력하면 Get-ChildItem ( dir)와 목록을 보려면, 다음 PowerShell을 밖에서 무언가를 다른 디렉토리 목록을 복용 기대한다 데이터베이스에 대한 변경 사항을 확인하십시오.

내 문제 (PowerShell 용어로 설명)를 설명하기에 적합한 용어를 알고 있으면 Google에서 대답을 찾거나 기존의 중복 질문을 찾을 수 있다고 생각하지만 막혀 있습니다.

+3

"소프트웨어 엔지니어링에는 두 가지 어려운 문제가 있습니다. 이름 지정, 캐시 무효화 및 하나의 오류로 인해 꺼짐" – Richard

답변

5

이것은 PowerShell 및 데이터와 관련된 모든 작업과이를 새로 고치는 것이 얼마나 중요한지를 보여줍니다. 간단한 캐싱 체계는 시간 기반 시스템을 사용하여 N 분 후에 백엔드 데이터 계층에 대한 요청이 새로운 복사본을 가져 와서 타이머를 재설정하는 방식입니다. 당신은 이미 당신의 특별한 규칙이 무엇인지 생각하고있는 것 같습니다. 두 개의 연속적인 "dir"명령이 항상 뒷받침 저장소에서 두 번 당겨 야한다고 생각하지 않지만 시스템에 대해 그렇게 생각합니다. 그래서 그렇게해라.

UPDATE

아마도 간단한 원칙이 제공 명령에 따라 발행 된 후에 만 ​​데이터를 새로 고침해야 할 수도 있습니다.

  • 지우기 품목
  • 복사 품목
  • 가져 품목
  • 호출 품목
  • 이동 품목
  • : 바이더 아이템에서 작동 내장 명령의 목록은 다음과 같이 구성
  • 새로운 품목
  • 제거 품목
  • 이름 바꾸기 품목
  • 설정 항목 또한

,이 구성 특성을 제공 항목에서 작동 내장 명령 목록 :

  • 지우기-ItemProperty를가
  • 복사-ItemProperty를
  • GET- ItemProperty
  • Move-ItemProperty
  • 새 항목 속성
  • ,
  • 제거-ItemProperty를
  • 이름 바꾸기-ItemProperty를
  • 설정-ItemProperty를

그리고 마지막으로, 읽기/컨텐츠를 작성, 우리가 사용

  • 추가 내용
  • 지우기 - 콘텐츠
  • Get-Content
  • 세트 내용

각 명령에는 NavigationCmdletProvider (계층 적 데이터 저장소 용)에 해당하는 메소드가 있으며 여기에서 데이터를 새로 고칠 수 있습니다. 새로운/이동/이름 바꾸기/제거/설정/지우기 및 기타 데이터 변경 방법을 구현할 때 PowerShell의 공급자 인스턴스가 싱글 톤이 아니기 때문에 일종의 낙관적 인 동시성 방법론을 사용해야합니다. 언제든지 하나 이상의 인스턴스가있을 수 있습니다.

나는 당신이 프로토 타입 일을 쉽게 찾을 수 있습니다 스크립트에서 구현됩니다 공급자를 썼다.이 도움이 http://psprovider.codeplex.com/

희망을 참조하십시오.

+1

현재 시간 기반 접근 방식을 사용하고 있습니다. 그러나 그것은 hackish를 느낀다. PowerShell에는 한 명령의 실행에서 메서드를 5 번 호출하는 시점과 새 명령이나 새 파이프 라인이 실행중인 시점 간의 차이를 알 수있는 적절한 표시기가 있습니다. –

+0

다른 예를 들어 보겠습니다. 누군가가 공급자와의 상호 작용 및 데이터베이스에 영향을주는 기존 도구의 실행을 포함하는 .ps1 스크립트를 작성한 경우 서로간에 데이터를 조작하여 몇 밀리 초 후에 공급자 작업이 연속적으로 수행 될 수 있습니다. 그 사람들이 저를 수용하기 위해 대본에 잠을 자거나 연기하도록 제안하는 것이 전문가가 아닌 것처럼 보입니다.또한 모든 공급자 메서드의 데이터베이스로 이동하는 것이 잘못된 것처럼 보입니다. 이러한 메서드가 단일 명령의 실행에서 여러 번 호출 될 때. 이것은 내가 생각하기에 내가 쟁점하는 문제이다. –

+0

오케이, 제 답변에 약간의 세부 사항을 추가하겠습니다. – x0n