PowerShell Invoke-Sqlcmd切换到sqlps会话

sca*_*r80 21 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
Run Code Online (Sandbox Code Playgroud)

这不起作用:

Push-Location
Invoke-Sqlcmd -ServerInstance $server -Database master -Username $user -Password $password   -InputFile $file `
-ErrorAction Stop -OutputSqlErrors $true -Variable $variable
Pop-Location
Run Code Online (Sandbox Code Playgroud)

alr*_*roc 37

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

PowerShell 3.0引入的模块的自动导入使得这更加烦人,因为您可能甚至没有意识到您在事后才导入模块.

当我使用时sqlps,我显式导入它,以便我可以控制我的工作目录,如下所示:

push-location
import-module sqlps -disablenamechecking
pop-location
Run Code Online (Sandbox Code Playgroud)

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

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