PowerShell Invoke-Sqlcmd переключается на сеанс sqlps
Я пишу script в PowerShell ISE, и я использую Invoke-Sqlcmd.
После выполнения команды сеанс Powershell переключается на сеанс sqlps (PS SQLSERVER: > ), и я не могу выполнить script во второй раз. Мне нужно выйти из 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
Ответы
Ответ 1
Поведение модуля sqlps
должно оставить вас в psdrive
, который он создает. Я абсолютно уверен, что люди попросили Microsoft исправить это, поскольку это очень раздражает и подрывает.
Автоматический импорт модулей, представленных PowerShell 3.0, делает это еще более раздражающим, потому что вы даже не можете понять, что вы импортируете модуль до тех пор, пока это не произойдет.
Когда я использую sqlps
, я явно импортирую его, чтобы я мог контролировать свой рабочий каталог следующим образом:
push-location
import-module sqlps -disablenamechecking
pop-location
Это возвращает вас в предыдущий каталог после загрузки модуля.
Очень позднее редактирование: с появлением SQL Server Management Studio 2016 у нас появился новый модуль PowerShell sqlserver
, который заменяет sqlps
и устраняет эту проблему.
Ответ 2
Сегодня в SuperUser был аналогичный вопрос: https://superuser.com/questions/767427/stuck-in-powershell-sqlserver
Вы можете просто вернуться к C:
Ответ 3
Простая директория cd 'по вашему выбору' вернет вас в предыдущий каталог, в котором вы были.
PS SQLSERVER:\> cd D:
Результат:
PS D:\>