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: