run - script sql powershell
PowerShell Invoke-Sqlcmd cambia a la sesiĆ³n de sqlps (3)
El sqlps
módulo sqlps
es dejarlo en el psdrive
que crea. Estoy bastante seguro de que la gente le ha pedido a Microsoft que arregle esto, ya que es muy molesto y disruptivo.
La importación automática de módulos introducida por PowerShell 3.0 hace que esto sea aún más molesto, porque es posible que ni siquiera se dé cuenta de que está importando el módulo hasta después del hecho.
Cuando uso sqlps
, lo importo explícitamente para poder controlar mi directorio de trabajo de la siguiente manera:
push-location
import-module sqlps -disablenamechecking
pop-location
Esto lo regresa a su directorio anterior después de que se carga el módulo.
Edición muy tardía: con la llegada de SQL Server Management Studio 2016, tenemos un nuevo módulo PowerShell, sqlserver
, que sustituye a sqlps
y resuelve este problema.
Estoy escribiendo un script en PowerShell ISE y estoy usando Invoke-Sqlcmd. Después de ejecutar el comando, la sesión de Powershell cambia a sesión sqlps (PS SQLSERVER:>) y no puedo ejecutar el script por segunda vez. Tengo que salir de PowerShell ISE y volver a iniciarlo.
Así que mi pregunta es: cómo volver a cambiar de sqlps a ps regular o cómo evitar que Invoke-Sqlcmd cambie de sesión.
Invoke-Sqlcmd -ServerInstance $server -Database master -Username $user -Password $password -InputFile $file `
-ErrorAction Stop -OutputSqlErrors $true -Variable $variable
Esto no funciona:
Push-Location
Invoke-Sqlcmd -ServerInstance $server -Database master -Username $user -Password $password -InputFile $file `
-ErrorAction Stop -OutputSqlErrors $true -Variable $variable
Pop-Location
Hoy hubo una pregunta similar en el Superusuario: https://superuser.com/questions/767427/stuck-in-powershell-sqlserver
Deberías poder volver a C:
Un simple cd ''directorio de su elección'' lo regresará al directorio anterior en el que estaba.
PS SQLSERVER:/> cd D:
Resultado:
PS D:/>