Atrapado en el servidor de Powershell

14

Soy un novato de PowerShell.

Así que he creado un script que usa el Restore-SqlDatabasecomando. Sin embargo, después de ejecutarlo, deja Powershell en un estado diferente.

PS D:\theFolder\> .\myRestoreDatabaseScript.ps1
... snip does the work ...
PS SQLSERVER:\>

¿Cómo puedo devolver Powershell a la interfaz "normal"?

Además, ¿cómo se PS SQLSERVERllama el prefijo? Intenté buscarlo en Google y me quedé vacío.

Nathan Koop
fuente

Respuestas:

21

Del artículo de MS SQL Server PowerShell

• Un proveedor de SQL Server, que habilita un mecanismo de navegación simple similar a las rutas del sistema de archivos. Puede crear rutas similares a las rutas del sistema de archivos, donde la unidad está asociada con un modelo de objetos de administración de SQL Server y los nodos se basan en las clases de modelo de objetos. Luego puede usar comandos conocidos como cd y dir para navegar por las rutas similares a la forma en que navega por las carpetas en una ventana de símbolo del sistema. Puede usar otros comandos, como ren o del , para realizar acciones en los nodos de la ruta.

Tener un proveedor como este cargado le permite tratar el SQLServer de la misma manera que trataría una unidad (letra).

Entonces, lo más probable es que en algún lugar de su código haya utilizado CDpara pasar al proveedor SQLServer ( cd sqlserver:).

Si quisieras volver a d:\thefolderusarlo específicamente cd d:\thefolder.

Si desea volver a donde comenzó cuando haya terminado, entonces probablemente tendrá que almacenar la ubicación del directorio actual en una variable al inicio del script, y luego usarlo cdal final del script para volver a cambiar a ese directorio original

O podría, como lo sugiere @ alroc en su comentario, usar los cmdlets push-locationy pop-locationpara almacenar y recuperar la ubicación actual.

Ƭᴇcʜιᴇ007
fuente
3
No tiene que guardar el directorio actual en una variable; use push-locationantes de importar sqlpsy pop-locationdespués de importar y ya está listo.
alroc
@alroc Supuse que probablemente había algo así, pero no estaba al tanto de eso. :) Práctico.
Ƭᴇcʜιᴇ007
7

Esto parece funcionar para mí:

Invoke-Sqlcmd -InputFile "C:\MyFolder\TestSqlCmd.sql" | out-null
ccyborg
fuente
1

Simplemente escriba C:en el símbolo del sistema, para volver al indicador habitual (por ejemplo, C: \>).

Solo para información, lo que puede haber activado el indicador SMO (es decir, PS SQLSERVER:> ) desde el indicador C: \> normal ) es cuando carga el ensamblaje SMO sin Out-Null (out-null suprime el resultado devuelto por el cmdlet )

En otras palabras, para evitar entrar inadvertidamente en el indicador SMO al cargar el conjunto SMO, simplemente conecte el Out-Null como se muestra a continuación:

[Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | Out-Null

Como Microsoft ha desaprobado el método LoadWithPartialName () , use Add-Type en su lugar:

Add-Type -Path "your_path_to_assembly\Smo.dll"

Nota: para obtener la ruta a su ensamblado / dll, use el método GetAssemblies () de la siguiente manera:

[System.AppDomain]::CurrentDomain.GetAssemblies() | ? {$_.Location -match 'Smo.dll'}

HTH

Eddie Kumar
fuente