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