PowerShell Invoke-Sqlcmd переключается в сеанс sqlps

Я пишу сценарий в PowerShell ISE и использую Invoke-Sqlcmd. После выполнения команды сеанс Powershell переключается в сеанс sqlps (PS SQLSERVER:>), и я не могу выполнить сценарий во второй раз. Я должен выйти из PowerShell ISE и запустить его снова.

Поэтому мой вопрос: как переключиться обратно с sqlps на обычный ps или как запретить Invoke-Sqlcmd переключать сеанс.

Invoke-Sqlcmd -ServerInstance $server -Database master -Username $user -Password $password   -InputFile $file `
   -ErrorAction Stop -OutputSqlErrors $true -Variable $variable

Это не работает:

Push-Location
Invoke-Sqlcmd -ServerInstance $server -Database master -Username $user -Password $password   -InputFile $file `
-ErrorAction Stop -OutputSqlErrors $true -Variable $variable
Pop-Location

3 ответа

Решение

sqlps поведение модуля, чтобы оставить вас в psdrive что это создает. Я вполне уверен, что люди попросили Microsoft исправить это, так как это очень раздражает и подрывает.

Автоматический импорт модулей, представленный PowerShell 3.0, делает это еще более раздражающим, потому что вы можете даже не осознавать, что импортируете модуль, пока не закончите.

Когда я использую sqlpsЯ явно импортирую его, чтобы управлять своим рабочим каталогом следующим образом:

push-location
import-module sqlps -disablenamechecking
pop-location

Это вернет вас в ваш предыдущий каталог после загрузки модуля.

Очень позднее редактирование: с появлением SQL Server Management Studio 2016 у нас появился новый модуль PowerShell, sqlserver, который заменяет sqlps и решает эту проблему.

Простой cd "каталог по вашему выбору" вернет вас к предыдущему каталогу, в котором вы были.

PS SQLSERVER:\> cd D:

Результат:

PS D:\>

Сегодня в SuperUser был похожий вопрос: https://superuser.com/questions/767427/stuck-in-powershell-sqlserver

Вы должны иметь возможность просто вернуться к C:

Другие вопросы по тегам