powershell – 模块中函数的Add-pssnapin不起作用(范围问题?)

我有这个功能:

function start-sqlsnap
{
                add-pssnapin SqlServerCmdletSnapin100
}

无论用于加载函数的方法如何,get-pssnapin都会显示加载的snapin.然而:

>如果粘贴在shell中,则会识别函数(如invoke-sqlcmd)
>如果来自文件的点,则识别功能
>如果放在psm1文件中(在模块文件夹内,在其自己的文件夹中,与psm1文件同名)并加载了import-module,则无法识别特定于管理单元的功能 – 但运行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

我用不同的snapin尝试了同样的事情:Microsoft.EnterpriseManagement.OperationsManager.Client并且具有完全相同的结果.
我在2008 R2上运行PowerShell 2.

这是一个已知的错误或功能吗?能以某种方式解决这个问题吗?

最佳答案 如果您只添加单行,而不是将该函数添加到模块文件中:

add-pssnapin SqlServerCmdletSnapin100

我试过了,它似乎工作.

点赞