2013-07-17 8 views
2

내가 만드는 사용자 지정 Powershell Commandlet에 대해 SqlServerCmdletSnapin을 사용하고 싶습니다. 내 PSM1의 시작 부분에 다음 코드를 추가하는 경우 :Powershell 모듈 용 Powershell Snapin 추가 및 여러 번 가져 오기

if ((Get-PSSnapin -Name sqlserverprovidersnapin100 -ErrorAction SilentlyContinue) -eq $null) 
{ 
    Add-PsSnapin sqlserverprovidersnapin100 
} 

if ((Get-PSSnapin -Name sqlservercmdletsnapin100 -ErrorAction SilentlyContinue) -eq $null) 
{ 
    Add-PsSnapin sqlservercmdletsnapin100 
} 
Export-ModuleMember Invoke-SqlCmd 

모든 위대한 처음 작동 나는 실행

Import-Module MyModule -Force

그러나, 두 번째는 내가 실행

Import-Module MyModule -Force

다음 오류가 발생합니다.

Add-PsSnapin : An item with the same key has already been added.

그리고 내 코드는 더 이상 Invoke-SqlCmd를 호출 할 수 없습니다. 내 맞춤 모듈에 파워 쉘 스냅인을 추가하는 가장 좋은 방법은 무엇입니까?

+0

'Add-PsSnapin sqlserverprovidersnapin100 -ErrorAction SilentlyContinue' 시도 할 수 있습니다. – user1578107

+1

같은 문제가 발생합니다. 이 문제는 Import-Module이 이미로드 된 모듈과 동일한 범위에서 작동하지 않는 것으로 보입니다. 이유를 모르겠다. –

+1

모듈을로드 한 다음 Add-PSSnapin을 호출하는 내 보낸 함수를 호출하면 해당 스냅인이 runspace에로드되지만 스냅인의 cmdlet은 모듈 스크립트에 직접 액세스 만 가능하고 모듈 외부는 코딩되지 않습니다. 이것은 위의 동작을 발생시킵니다. 여기서 get-pssnapin을 실행하면 스냅인이 나열되지 않지만 추가하려고하면 기술적으로 스냅인이 runspace에로드 되었기 때문에 위의 오류가 발생하지만 모듈 외부의 코드가 그것을 사용할 수있는 방식이 아닙니다 : ( –

답변

4

모듈 목록 (.psd1)을 통해 자신의 모듈에 필요한이 모듈을 지정하려고 할 수 있습니다. RequiredModules here을 참조하십시오.