Add-pssnapin из функции в модуле не работает (проблема объема?) - PullRequest
4 голосов
/ 03 июня 2011

У меня есть эта функция:

function start-sqlsnap
{
                add-pssnapin SqlServerCmdletSnapin100
}

Независимо от метода, используемого для загрузки функции, get-pssnapin покажет загруженный оснастку.Однако:

  1. При вставке в оболочку функции (например, invoke-sqlcmd) распознаются
  2. Если точка получена из файла, функции распознаются
  3. Если он помещен в файл 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

Я попробовал то же самое с другой оснасткой: Microsoft.EnterpriseManagement.OperationsManager.Client и получил точно такой же результат.Я использую PowerShell 2 на 2008 R2.

Это известная ошибка или функция?Могу ли я решить это как-нибудь?

Ответы [ 2 ]

2 голосов
/ 03 июня 2011

Вместо добавления функции в файл модуля, что если вы просто добавите одну строку:

add-pssnapin SqlServerCmdletSnapin100

Я попробовал это, и, похоже, это сработало.

0 голосов
/ 21 марта 2016

Добавление только одной строки в ваш скрипт может быть решением, если ваша функция выполняет ТОЛЬКО одну строку. Но если в ваших функциях много строк, и вам нужно проверить некоторые требования или загрузить другую версию PsSnapin в зависимости от установленной версии SQL, это может быть проблематично.

В этом случае решение создает файл сценария PowerShell (.ps1) и перемещает ваши функции в этот файл. При вызове функции будут загружены все включенные модули / pssnapins.

заряженные pssnapins и модули НЕ доступны снаружи:

Import-Module "MyCustomModule" #(.psm1)

заряженные pssnapins и модули доступны снаружи:

Import-Module "MyCustomModule.ps1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...