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。將PowerShell管理單元添加到我的自定義模塊的最佳方式是什麼?
你可以試一下'Add-PsSnapin sqlserverprovidersnapin100 -ErrorAction SilentlyContinue' – user1578107
也會出現同樣的問題。這個問題似乎是因爲Import-Module似乎不像已經加載的模塊那樣在相同的範圍內運行。不知道爲什麼。 –
如果加載模塊,然後調用一個調用Add-PSSnapin的導出函數,則管理單元會加載到運行空間中,但管理單元的cmdlet只能*模塊腳本*訪問,而不能用於模塊外的代碼。這導致了上面的行爲,如果你做了一個get-pssnapin,那麼管理單元將不會被列出,但是如果你嘗試添加它,你會得到上面的錯誤,因爲技術上snapin已經被加載到了runspace中,但是而不是模塊外部的代碼可以使用它:( –