我正在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
并解决了此问题。