PowerShell Invoke-Sqlcmd切换到sqlps会话

时间:2014-06-11 13:56:19

标签: sql powershell invoke

我在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 个答案:

答案 0 :(得分:34)

sqlps模块的行为是让您进入它创建的psdrive。我相当肯定有人要求微软解决这个问题,因为它非常烦人且具有破坏性。

PowerShell 3.0引入的模块的自动导入使这更令人烦恼,因为您可能甚至没有意识到您在事件发生之后才导入模块。

当我使用sqlps时,我明确地导入它,以便我可以按如下方式控制我的工作目录:

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

这会在模块加载后返回到您之前的目录。

编辑很晚:随着SQL Server Management Studio 2016的出现,我们推出了一个新的PowerShell模块sqlserver,取代sqlps并解决了这个问题。

答案 1 :(得分:4)

您选择的简单 cd'目录将使您返回上一个目录。

PS SQLSERVER:\> cd D:

结果:

PS D:\>

答案 2 :(得分:1)

今天在SuperUser上也有类似的问题:https://superuser.com/questions/767427/stuck-in-powershell-sqlserver

你应该可以回到C: