卡在 Powershell sqlserver 中

卡在 Powershell sqlserver 中

我是一个 powershell 新手。

因此,我创建了一个使用Restore-SqlDatabase命令行的脚本。但是,运行该脚本后,Powershell 处于不同的状态。

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

如何让 Powershell 返回到“正常”界面?

另外,前缀叫什么PS SQLSERVER?我尝试用 Google 搜索,但一无所获。

答案1

来自 MS 文章SQL Server PowerShell

•SQL Server 提供程序,它启用了类似于文件系统路径的简单导航机制。您可以构建类似于文件系统路径的路径,其中驱动器与 SQL Server 管理对象模型相关联,节点基于对象模型类。然后,您可以使用熟悉的命令,例如光盘目录以类似于在命令提示符窗口中导航文件夹的方式导航路径。您可以使用其他命令,例如或者德尔,对路径中的节点执行操作。

加载这样的提供程序后,您就可以像对待驱动器(字母)一样对待 SQLServer。

因此,您很可能已经在代码中的某个地方习惯了将CDSQLServer 提供程序移入其中(cd sqlserver:)。

如果您想要具体返回,d:\thefolder您可以使用cd d:\thefolder

如果完成后您想返回到开始的位置,那么您可能必须将当前目录位置存储到脚本开头的变量中,然后在cd脚本末尾使用它来改回原始目录。

或者你可以按照@alroc 在他的评论中所建议的那样,使用push-locationpop-locationcmdlet 来存储和检索当前位置。

答案2

这似乎对我有用:

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

答案3

只需在命令提示符下输入C:即可返回到通常的(例如 C:\>)提示符。

仅供参考,可能触发 SMO 提示的原因(即PS SQLSERVER:>)从正常目录:\>提示符),就是在加载 SMO 程序集时不带出零(out-null 抑制 cmdlet 返回的输出)。

换句话说,为了避免在加载 SMO 程序集时无意中进入 SMO 提示符,只需将出零如下:

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

由于微软已经弃用 加载部分名称()方法,使用添加类型反而:

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

注意:要获取程序集/dll 的路径 - 使用获取组件()方法如下:

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

嗨嗨。

相关内容