I am writing a script in PowerShell ISE and I am using Invoke-Sqlcmd. After the command is executed the Powershell session switches into sqlps session (PS SQLSERVER:>) and I can't execute script for the second time. I have to quit PowerShell ISE and start it again.
So my question is: how to switch back from sqlps to regular ps or how to prevent Invoke-Sqlcmd from switching session.
Invoke-Sqlcmd -ServerInstance $server -Database master -Username $user -Password $password -InputFile $file `
-ErrorAction Stop -OutputSqlErrors $true -Variable $variable
This doesn't work:
Push-Location
Invoke-Sqlcmd -ServerInstance $server -Database master -Username $user -Password $password -InputFile $file `
-ErrorAction Stop -OutputSqlErrors $true -Variable $variable
Pop-Location
The
sqlps
module's behavior is to leave you in thepsdrive
that it creates. I'm fairly certain that people have asked Microsoft to fix this, as it's very annoying and disruptive.The automatic importing of modules introduced by PowerShell 3.0 makes this even more annoying, because you may not even realize that you're importing the module until after the fact.
When I use
sqlps
, I explicitly import it so that I can control my working directory as follows:This returns you to your previous directory after the module is loaded.
Very late edit: With the advent of SQL Server Management Studio 2016 we have a new PowerShell module,
sqlserver
, which supersedessqlps
and resolves this problem.A simple cd 'directory of your choice' will put you back to the previous directory you were in.
Result:
There was a similar question over at SuperUser today: https://superuser.com/questions/767427/stuck-in-powershell-sqlserver
You should be able to just go back to C: