Ответ 1
Я решил эту проблему, добавив cd <local folder>
в качестве первой строки script, чтобы выйти из провайдера.
Чувствует себя хакерским.
У меня есть большая библиотека существующих скриптов powershell, в первую очередь для выполнения сложной логики и взаимодействия между SQL Server и файловой системой.
SQL-взаимодействия обычно выполняются с помощью командлета Invoke-SQLCmd
.
В последнее время версия SSMS на всех моих серверах была обновлена до 2012 года. Это означало, что мне пришлось внести некоторые изменения в мой код, чтобы удалить ссылки на sqlserverprovidersnapin100
и sqlservercmdletsnapin100
, поскольку они устарели в 2012 году в пользу импорта модуль SQLPs
.
Это работает нормально, но кажется, что модуль SQLPs
в какой-то момент меняет текущее местоположение на PS SQLSERVER>
вместо <local folder>
, что приводит к сбою многих других моих команд. Например, если я запускаю Test-Path
на сетевом диске, он отлично работает с местоположением <local folder>
, но сбой в SQLSERVER
.
Известно ли это? Есть ли способ обхода или настройки, которые я могу изменить для этого?
Основной script Меня беспокоит более 1000 строк и работает без проблем в течение более двух лет, пока мы не внесем это изменение, поэтому я бы хотел избежать выполнения линейного теста, если могу.
Я решил эту проблему, добавив cd <local folder>
в качестве первой строки script, чтобы выйти из провайдера.
Чувствует себя хакерским.
Немного больше информации о 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