Bloccato nel sqlserver Powershell


14

Sono un po 'un principiante di PowerShell.

Quindi ho creato uno script che utilizza il Restore-SqlDatabasecommandlet. Tuttavia, dopo averlo eseguito, lascia Powershell in uno stato diverso.

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

Come posso riportare Powershell all'interfaccia "normale"?

Inoltre, come si PS SQLSERVERchiama il prefisso? Ho provato a Google per questo e ne sono uscito vuoto.

Risposte:


21

Dall'articolo MS SQL Server PowerShell

• Un provider SQL Server, che abilita un semplice meccanismo di navigazione simile ai percorsi del file system. È possibile creare percorsi simili ai percorsi del file system, in cui l'unità è associata a un modello a oggetti di gestione di SQL Server e i nodi si basano sulle classi del modello a oggetti. È quindi possibile utilizzare comandi familiari come cd e dir per esplorare i percorsi in modo simile a come si spostano le cartelle in una finestra del prompt dei comandi. È possibile utilizzare altri comandi, come ren o del , per eseguire azioni sui nodi nel percorso.

Avere un provider come questo caricato ti consente di trattare SQLServer nello stesso modo in cui tratteresti un'unità (lettera).

Quindi molto probabilmente da qualche parte nel tuo codice hai usato CDper spostarti nel provider SQLServer ( cd sqlserver:).

Se volessi tornare nello d:\thefolderspecifico, lo useresti cd d:\thefolder.

Se vuoi tornare da dove hai iniziato una volta terminato, probabilmente dovrai memorizzare la posizione corrente della directory in una variabile all'inizio dello script, e poi usarla con cdalla fine dello script per tornare a quella directory originale.

Oppure potresti, come suggerito da @ alroc's nel suo commento, utilizzare i cmdlet push-locatione pop-locationper archiviare e recuperare la posizione corrente.


3
Non è necessario salvare la directory corrente in una variabile; usa push-locationprima di importare sqlpse pop-locationdopo l'importazione e sei a posto.
alroc,

@alroc Ho pensato che probabilmente c'era qualcosa del genere, ma non ne ero a conoscenza. :) Maneggevole.
Ƭᴇcʜιᴇ007,

7

questo sembra funzionare per me:

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

1

Digitare semplicemente C:il prompt dei comandi, per tornare al solito prompt (ad es. C: \>).

A solo scopo informativo, ciò che potrebbe aver attivato il prompt SMO (ovvero PS SQLSERVER:> ) dal normale prompt C: \> ) è quando si carica l'assembly SMO senza Out-Null (out-null elimina l'output restituito dal cmdlet ).

In altre parole, per evitare di entrare inavvertitamente nel prompt SMO durante il caricamento dell'assembly SMO, è sufficiente reindirizzare Out-Null come di seguito:

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

Poiché Microsoft ha deprecato il metodo LoadWithPartialName () , utilizzare invece Add-Type :

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

Nota: per ottenere il percorso dell'assembly / dll, utilizzare il metodo GetAssemblies () come di seguito:

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

HTH.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.