2009-08-11 3 views
1

SQL 데이터베이스를 통한 비즈니스 로직 계층 인 Powershell 공급자에서 Powershell 드라이브는 데이터베이스 연결 설정과 동일합니다. 이 연결 설정 모음은 로컬 컴퓨터의 암호화 된 XML 파일에 유지됩니다. 관리자는 SQL Server 자격 증명을 제공하는 컴퓨터에 이러한 PS 드라이브를 추가하여 다른 Powershell 사용자가 스크립트를 작성할 때 사용할 수 있습니다. 관리자가 New-PSDrive를 실행하면 컬렉션에 드라이브를 추가하고이를 XML에 유지합니다. PSDrive를 제거하면 영구 XML에서 드라이브가 제거됩니다. 이것은 잘 작동합니다. 그러나 Powershell 호스트가 종료되면 각 기존 드라이브에 대해 RemoveDrive()가 호출됩니다. 이 시점에서 드라이브를 컴퓨터에서 계속 사용해야하므로 드라이브를 제거하고 싶지 않습니다.Powershell 공급자 드라이브 정보를 유지하려면 어떻게해야합니까?

사용자가 Remove-PSDrive를 수동으로 실행하거나 호스트를 종료 할 때 RemoveDrive()가 호출되는지 어떻게 결정합니까?

또한 잘 작동하는 사용자 지정 드라이브 정보 매개 변수를 만들었지 만 드라이브를 추가하고 제거하는 데 사용되는 사용자 지정 cmdlet도 작성했습니다. 내 cmdlet에서 psdrives를 만들고 제거 할 수 있습니까?

답변

0

이 경우 InitializeDefaultDrives 무시를 사용할 수 있습니다. 즉, 영구 문자열 연결 저장소가 있어야 공급자가 초기화 될 때 모든 적절한 드라이브를 만들 수 있습니다. 이 정보를 저장하려면 중지 가상 메소드를 무시할 수 있어야합니다.

+0

@keith : InitializeDefaultDrives()를 재정의하고이 함수에서 디스크에서 영구 드라이브 컬렉션을로드합니다. 문제는 스크립터가 드라이브를 제거 할 수 있도록 Remove-PSDrive (RemoveDrive()를 다시 호출 함)를 실행하도록 허용해야한다는 것입니다. 그 시점에서 필자는 해당 드라이브를 제거하고 그것을 xml 파일에서 영구 보존해야하므로 말하십시오. 그러나 powershell이 ​​종료되면로드 된 각 드라이브에 대해 RemoveDrive()가 호출됩니다. 이 경우 나는 그들을 유지하기를 원하지 않습니다. RemoveDrive()에서 스크립터가 실행 중이거나 Powershell이 ​​종료하는지 어떻게 알 수 있습니까? –

+0

CmdletProvider.Stopping 속성은 사용자 또는 PowerShell에서 드라이브를 제거하는지 여부에 따라 다릅니다. –

+0

Keith는 아마 올바른 위치에 있습니다. 공급자의 Stop을 재정 의하여 플래그를 설정할 수도 있습니다. 플래그가 설정되어 있으면 powershell이 ​​종료되지만 어느 것이 먼저 호출되는지 확실하지 않습니다. provider.stop 또는 remove -psdrive ... – x0n