Подтвердить что ты не робот

Модуль SQLPs SQL Server 2012 - Автоматическое изменение текущего местоположения?

У меня есть большая библиотека существующих скриптов powershell, в первую очередь для выполнения сложной логики и взаимодействия между SQL Server и файловой системой.

SQL-взаимодействия обычно выполняются с помощью командлета Invoke-SQLCmd.

В последнее время версия SSMS на всех моих серверах была обновлена ​​до 2012 года. Это означало, что мне пришлось внести некоторые изменения в мой код, чтобы удалить ссылки на sqlserverprovidersnapin100 и sqlservercmdletsnapin100, поскольку они устарели в 2012 году в пользу импорта модуль SQLPs.

Это работает нормально, но кажется, что модуль SQLPs в какой-то момент меняет текущее местоположение на PS SQLSERVER> вместо <local folder>, что приводит к сбою многих других моих команд. Например, если я запускаю Test-Path на сетевом диске, он отлично работает с местоположением <local folder>, но сбой в SQLSERVER.

Известно ли это? Есть ли способ обхода или настройки, которые я могу изменить для этого?

Основной script Меня беспокоит более 1000 строк и работает без проблем в течение более двух лет, пока мы не внесем это изменение, поэтому я бы хотел избежать выполнения линейного теста, если могу.

4b9b3361

Ответ 1

Я решил эту проблему, добавив cd <local folder> в качестве первой строки script, чтобы выйти из провайдера. Чувствует себя хакерским.

Ответ 2

Немного больше информации о WHY в sql 2012 он меняется в каталог SQLSERVER: <... >

Когда powershell импортирует модуль sqlps, манифест определяет файл post script с именем SqlPsPostScript.ps1. Этот файл (первая строка) изменяет текущее местоположение на SQLSERVER: поставщик

В поле бит 64 бит находится модуль - C:\Program Files (x86)\Microsoft SQL Server\110\Tools\PowerShell\Modules\SQLPS.

В powershell 3.0 автоматическое импортирование может затруднить определение, когда это произойдет (по моему опыту).

Неясно, почему (с логической точки зрения) он должен это делать. Мы не хотим касаться модулей SQL-сервера, поэтому, я думаю, вам нужно сделать явное заданное местоположение после импорта модуля. Вы также можете рассматривать это как решение, которое немного менее взломанно.

Push-Location
Import-Module sqlps
Pop-Location