In Powershell sqlserver stecken

14

Ich bin ein bisschen ein PowerShell-Neuling.

Also habe ich ein Skript erstellt, das das Restore-SqlDatabaseCommandlet verwendet. Nachdem ich es ausgeführt habe, befindet sich Powershell jedoch in einem anderen Zustand.

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

Wie kann ich Powershell zur "normalen" Oberfläche zurückführen?

Wie heißt das PS SQLSERVERPräfix? Ich habe versucht, dies zu googeln und bin leer ausgegangen.

Nathan Koop
quelle

Antworten:

21

Aus dem MS-Artikel SQL Server PowerShell

• Ein SQL Server-Anbieter, der einen einfachen Navigationsmechanismus ähnlich den Dateisystempfaden ermöglicht. Sie können Pfade ähnlich wie Dateisystempfade erstellen, bei denen das Laufwerk einem SQL Server-Verwaltungsobjektmodell zugeordnet ist und die Knoten auf den Objektmodellklassen basieren. Sie können dann vertraute Befehle wie cd und dir verwenden , um durch die Pfade zu navigieren, ähnlich wie Sie in Ordnern in einem Eingabeaufforderungsfenster navigieren. Sie können andere Befehle wie ren oder del verwenden , um Aktionen auf den Knoten im Pfad auszuführen.

Wenn Sie einen Anbieter wie diesen geladen haben, können Sie den SQLServer genauso behandeln wie ein Laufwerk (einen Buchstaben).

Höchstwahrscheinlich haben Sie irgendwo in Ihrem Code CDden SQLServer-Provider ( cd sqlserver:) verwendet.

Wenn Sie d:\thefolderspeziell darauf zurückkommen möchten, würden Sie verwenden cd d:\thefolder.

Wenn Sie zu dem Punkt zurückkehren möchten, an dem Sie begonnen haben, müssen Sie wahrscheinlich den aktuellen Verzeichnisspeicherort in einer Variablen am Anfang des Skripts speichern und ihn dann cdam Ende des Skripts verwenden, um wieder dorthin zu wechseln Originalverzeichnis.

Oder Sie könnten, wie von @ alroc ist in seinem Kommentar, verwenden Sie die push-locationund pop-locationCmdlets zu speichern und den aktuellen Standort abrufen.

Ƭᴇcʜιᴇ007
quelle
3
Sie müssen das aktuelle Verzeichnis nicht in einer Variablen speichern. Verwenden Sie push-locationvor dem Import sqlpsund pop-locationnach dem Import und Sie sind gut zu gehen.
Alroc
@alroc Ich dachte, es gibt wahrscheinlich so etwas, aber ich war mir dessen nicht bewusst. :) Praktisch.
Ƭᴇcʜιᴇ007
7

das scheint bei mir zu funktionieren:

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

Geben Sie einfach C:an der Eingabeaufforderung ein, um zur üblichen Eingabeaufforderung (z. B. C: \>) zurückzukehren.

Nur zur Information, was möglicherweise die SMO-Eingabeaufforderung (dh PS SQLSERVER:> ) von der normalen Eingabeaufforderung C: \> ausgelöst hat , ist, wenn Sie die SMO-Assembly ohne Out-Null laden (out-null unterdrückt die vom Cmdlet zurückgegebene Ausgabe ).

Mit anderen Worten, um zu vermeiden, dass beim Laden der SMO-Assembly versehentlich in die SMO-Eingabeaufforderung gewechselt wird, leiten Sie den Out-Null einfach wie folgt weiter:

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

Verwenden Sie stattdessen den Add-Type, da Microsoft die LoadWithPartialName () -Methode nicht mehr unterstützt:

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

Hinweis: Um den Pfad zu Ihrer Assembly / DLL abzurufen, verwenden Sie die folgende GetAssemblies () -Methode:

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

HTH.

Eddie Kumar
quelle