2011-06-03 25 views
4

我有這樣的功能:從功能添加,pssnapin一個模塊不能正常工作(範圍問題?)

function start-sqlsnap 
{ 
       add-pssnapin SqlServerCmdletSnapin100 
} 

無論用於加載功能的方法,得到-pssnapin將顯示該管理單元加載。但是:

  1. 如果殼粘貼,則各功能(如調用-SQLCMD)被識別
  2. 如果點從文件來源,所述功能被識別
  3. 如果放置在一個PSM1文件(內模塊文件夾,在它自己的文件夾具有相同的名稱作爲PSM1文件),並裝有進口模塊,該管理單元的具體功能並不認可 - 但運行Get-pssnapin將顯示模塊加載。

錯誤:

The term 'invoke-sqlcmd' is not recognized as the name of a cmdlet, function, script file, or operable program. Check t 
he spelling of the name, or if a path was included, verify that the path is correct and try again. 
At line:1 char:14 
+ invoke-sqlcmd <<<< 
    + CategoryInfo   : ObjectNotFound: (invoke-sqlcmd:String) [], CommandNotFoundException 
    + FullyQualifiedErrorId : CommandNotFoundException 

我試着用不同的管理單元同樣的事情:Microsoft.EnterpriseManagement.OperationsManager.Client並有完全相同的結果。 我在2008 R2上運行PowerShell 2。

這是一個已知的bug或功能?我能不能解決這個問題?

+0

我只是想這和它的工作對我來說是什麼你得到'Get-Module'嗎?我得到: ModuleType名稱ExportedCommands ---------- ---- ---------------- 腳本SQLPS {調用-PolicyEvaluation,調用,SQLCMD } – PeskyGnat 2011-06-03 18:08:09

回答

2

,而不是添加功能模塊文件,如果你只需要添加的單行:

add-pssnapin SqlServerCmdletSnapin100 

我試過了,它似乎工作。

+0

這對我來說是訣竅。謝謝。 – Winfred 2011-06-03 19:36:38

0

只添加一行到你的腳本可以解決,如果你的功能確實只有一行。但是如果你的函數有很多行,你需要檢查一些需求或者根據安裝的SQL版本加載不同版本的PsSnapin,它可能會有問題。

在這種情況下,該解決方案是創建一個PowerShell腳本文件(名爲.ps1),並在該文件中移動你的功能。當你調用一個函數時,所有包含的模塊/ pssnapins將被加載。

充電pssnapins和模塊不能從外面:

Import-Module "MyCustomModule" #(.psm1) 

充電pssnapins和模塊可以從外面:

Import-Module "MyCustomModule.ps1