回答

收藏

PowerShell Invoke-Sqlcmd切换到sqlps会话

技术问答 技术问答 258 人阅读 | 0 人回复 | 2023-09-14

我正在PowerShell ISE中编写脚本,并且正在使用Invoke-Sqlcmd。执行命令后,Powershell会话将切换到sqlps会话(PS* J' `9 W1 E3 i( L
SQLSERVER:>),并且我第二次无法执行脚本。我必须退出PowerShell ISE并重新启动。% S% [( W/ G+ M& J: ~
所以我的问题是:如何从sqlps切换回常规ps或如何防止Invoke-Sqlcmd切换会话。7 I7 i- Y6 ?  ~9 e8 j
Invoke-Sqlcmd -ServerInstance $server -Database master -Username $user -Password $password   -InputFile $file `/ C* j5 ~/ s: B- G. C
   -ErrorAction Stop -OutputSqlErrors $true -Variable $variable2 h# @; ^2 d) L! R
这不起作用:
  V# E. U2 ]' i& x: w9 s9 P4 ?Push-Location
/ z1 p) X1 M+ l  S4 s9 c, M6 w. c$ TInvoke-Sqlcmd -ServerInstance $server -Database master -Username $user -Password $password   -InputFile $file `" f* b& R9 J$ J1 [6 }2 r* Y
-ErrorAction Stop -OutputSqlErrors $true -Variable $variable: H* g3 o! M, ], v; C, B( f" C
Pop-Location
1 C% y" q# A- a4 _/ A/ m8 A               
# }  M! @- N' J解决方案:. ^) H4 B! a' t. {/ D
                # V/ d* z  l1 Z) D3 J7 c0 h/ ^, a

0 P6 C- G% _; C8 r) E& L9 [
4 g1 X; `5 ]# M9 `! l+ `                该sqlps模块的行为是将您留在psdrive创建的模块中。我可以肯定地说,人们已经要求Microsoft修复此问题,因为它很烦人并且具有破坏性。) U' ^: {$ Q2 d3 |  H6 ]  P
PowerShell 3.0引入的模块自动导入功能使这一点变得更加烦人,因为您可能直到意识到之后才??意识到自己正在导入模块。
! F% M# z' O, b1 a8 p使用时sqlps,我会显式导入它,以便可以按以下方式控制我的工作目录:
" S$ J$ H& z+ b# ?; Epush-location
4 o$ c% i+ \! V9 F1 v: ^) b4 Gimport-module sqlps -disablenamechecking
% r" d) E2 p- i9 spop-location
2 q! o! U) K& ^0 N) W加载模块后,这将使您返回到先前的目录。
0 Z/ h# W# Q+ \& _7 w5 U很晚的编辑:随着SQL Server Management Studio2 e$ L( v2 G0 a' [
2016的到来,我们有了一个新的PowerShell模块sqlserver,该模块可以替代sqlps并解决此问题。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则