web-dev-qa-db-ja.com

PowerShell Invoke-Sqlcmdがsqlpsセッションに切り替わります

PowerShell ISEでスクリプトを作成していて、Invoke-Sqlcmdを使用しています。コマンドを実行した後、Powershellセッションがsqlpsセッション(PS SQLSERVER:>)に切り替わり、スクリプトを2回実行できません。 PowerShell ISEを終了して再起動する必要があります。

だから私の質問は、sqlpsから通常のpsに戻す方法、またはInvoke-Sqlcmdがセッションを切り替えないようにする方法です。

Invoke-Sqlcmd -ServerInstance $server -Database master -Username $user -Password $password   -InputFile $file `
   -ErrorAction Stop -OutputSqlErrors $true -Variable $variable

これは機能しません:

Push-Location
Invoke-Sqlcmd -ServerInstance $server -Database master -Username $user -Password $password   -InputFile $file `
-ErrorAction Stop -OutputSqlErrors $true -Variable $variable
Pop-Location
21
scar80

sqlpsモジュールの動作は、作成したpsdriveをそのままにしておくことです。非常に迷惑で混乱を招くので、人々がこれを修正するようにMicrosoftに要求したことはかなり確かです。

PowerShell 3.0で導入されたモジュールの自動インポートでは、事後までモジュールをインポートしていることに気付かない場合があるため、これはさらに面倒です。

sqlpsを使用する場合は、明示的にインポートして、次のように作業ディレクトリを制御できるようにします。

Push-location
import-module sqlps -disablenamechecking
pop-location

これにより、モジュールがロードされた後、以前のディレクトリに戻ります。

非常に遅い編集:SQL Server Management Studio 2016の登場により、sqlserverに取って代わり、この問題を解決する新しいPowerShellモジュールsqlpsが登場しました。

38
alroc

単純なcd '選択したディレクトリ'を使用すると、前のディレクトリに戻ります。

PS SQLSERVER:\> cd D:

結果:

PS D:\>
4
TaylorJ

今日SuperUserで同様の質問がありました: https://superuser.com/questions/767427/stuck-in-powershell-sqlserver

Cに戻ることができるはずです。

1
Tim Ferrill