我有这个功能:
function start-sqlsnap
{
add-pssnapin SqlServerCmdletSnapin100
}
无论加载函数的方法如何,get-pssnapin都会显示加载的snapin。但是:
错误:
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.
这是一个已知的错误或功能吗?我能以某种方式解决这个问题吗?
答案 0 :(得分:2)
如果您只添加单行,而不是将该函数添加到模块文件中:
add-pssnapin SqlServerCmdletSnapin100
我试过了,似乎有效。
答案 1 :(得分:0)
如果您的函数只执行一行,则只需在脚本中添加一行即可。但是,如果您的函数有很多行,并且您需要根据已安装的SQL版本检查某些要求或加载不同版本的PsSnapin,则可能会出现问题。
在这种情况下,解决方案是创建PowerShell脚本文件(.ps1)并在此文件中移动您的函数。当你调用一个函数时,将加载所有包含的modules / pssnapins。
从外面无法获得充电的pssnapins和模块:
Import-Module "MyCustomModule" #(.psm1)
收费的pssnapins和模块可从外面获取:
Import-Module "MyCustomModule.ps1