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

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
4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 3

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

PS SQLSERVER:\> cd D:

Результат:

PS D:\>