我正在PowerShell ISE中编写脚本,并且正在使用Invoke-Sqlcmd。
执行命令后,Powershell session 将切换到sqlps session (PS SQLSERVER:>),并且我第二次无法执行脚本。我必须退出PowerShell ISE并重新启动。

所以我的问题是:如何从sqlps切换回常规ps或如何防止Invoke-Sqlcmd切换 session 。

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

最佳答案

sqlps模块的行为是将您留在它创建的psdrive中。我可以肯定地说,人们已经要求Microsoft修复此问题,因为它很烦人并且具有破坏性。

PowerShell 3.0引入的模块自动导入使这一点变得更加烦人,因为您可能甚至在意识到之后才​​意识到自己正在导入模块。

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

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

加载模块后,这将使您返回到先前的目录。

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

08-03 23:23