Powershell sqlserverで立ち往生


13

私はちょっとした初心者です。

そのため、Restore-SqlDatabaseコマンドレットを使用するスクリプトを作成しました。ただし、実行した後、Powershellは別の状態のままになります。

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

Powershellを「通常の」インターフェイスに戻すにはどうすればよいですか?

また、PS SQLSERVERプレフィックスは何と呼ばれますか?私はこれのためにグーグルに試みました、そして、空になりました。

回答:


21

MSの記事SQL Server PowerShellから

SQL Serverプロバイダー。ファイルシステムパスに似たシンプルなナビゲーションメカニズムを有効にします。ドライブがSQL Server管理オブジェクトモデルに関連付けられ、ノードがオブジェクトモデルクラスに基づいているファイルシステムパスに似たパスを構築できます。その後、cddirなどの使い慣れたコマンドを使用して、コマンドプロンプトウィンドウでフォルダーをナビゲートする方法と同様のパスをナビゲートできます。rendelなどの他のコマンドを使用して、パス内のノードでアクションを実行できます。

このようなプロバイダーをロードすると、ドライブ(文字)を扱うのと同じ方法でSQLServerを扱うことができます。

したがってCD、SQLServerプロバイダー(cd sqlserver:)に移行するために使用したコードのどこかにある可能性が高いです。

d:\thefolder特に戻りたい場合はを使用しますcd d:\thefolder

終了時に開始した場所に戻りたい場合は、スクリプトの開始時に変数に現在のディレクトリの場所を保存し、スクリプトcdの最後でそれを使用して元に戻す必要があります。元のディレクトリ。

または、@ alrocのコメントで示唆されているように、push-locationpop-locationコマンドレットを使用して現在の場所を保存および取得できます。


3
現在のディレクトリを変数に保存する必要はありません。push-locationインポートする前とインポートsqlpsしたpop-location後に使用すると、準備完了です。
alroc

@alroc私はおそらくそのようなものがあると考えましたが、私はそれを知りませんでした。:)便利。
Ƭᴇcʜιᴇ007

6

これは私にとってはうまくいくようです:

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

1

C:コマンドプロンプトで入力するだけで、通常の(例:C:\>)プロンプトに戻ります。

参考までに、通常のC:\>プロンプトからSMOプロンプト(PS SQLSERVER:>など)をトリガーした可能性があるのは、Out-Nullを使用せずにSMOアセンブリを読み込むときです(out-nullはコマンドレットによって返される出力を抑制します) )。

言い換えれば、SMOアセンブリをロードする際に誤ってSMOプロンプトに入らないようにするには、次のようにOut-Nullをパイプするだけです。

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

MicrosoftはLoadWithPartialName()メソッドを廃止している ため、代わりにAdd-Typeを使用します。

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

注:アセンブリ/ dllへのパスを取得するには、以下のようにGetAssemblies()メソッドを使用します。

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

HTH。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.