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
sqlps
モジュールの動作は、作成したpsdrive
をそのままにしておくことです。非常に迷惑で混乱を招くので、人々がこれを修正するようにMicrosoftに要求したことはかなり確かです。
PowerShell 3.0で導入されたモジュールの自動インポートでは、事後までモジュールをインポートしていることに気付かない場合があるため、これはさらに面倒です。
sqlps
を使用する場合は、明示的にインポートして、次のように作業ディレクトリを制御できるようにします。
Push-location
import-module sqlps -disablenamechecking
pop-location
これにより、モジュールがロードされた後、以前のディレクトリに戻ります。
非常に遅い編集:SQL Server Management Studio 2016の登場により、sqlserver
に取って代わり、この問題を解決する新しいPowerShellモジュールsqlps
が登場しました。
単純なcd '選択したディレクトリ'を使用すると、前のディレクトリに戻ります。
PS SQLSERVER:\> cd D:
結果:
PS D:\>
今日SuperUserで同様の質問がありました: https://superuser.com/questions/767427/stuck-in-powershell-sqlserver
Cに戻ることができるはずです。