卡在Powershell sqlserver中


14

我有点像个新手。

因此,我创建了一个使用Restore-SqlDatabaseCommandlet 的脚本。但是,在我运行它之后,它使Powershell处于不同的状态。

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

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

另外,PS SQLSERVER前缀叫什么?我为此尝试了Google,结果空白了。

Answers:


21

摘自MS文章SQL Server PowerShell

•SQL Server提供程序,它启用类似于文件系统路径的简单导航机制。您可以构建类似于文件系统路径的路径,其中驱动器与SQL Server管理对象模型相关联,并且节点基于对象模型类。然后,您可以使用熟悉的命令(例如cddir)浏览路径,类似于在命令提示符窗口中浏览文件夹的方式。您可以使用rendel等其他命令在路径中的节点上执行操作。

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

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

如果您想重新d:\thefolder使用,请使用cd d:\thefolder

如果要返回完成后的开始位置,则可能必须将当前目录位置存储到脚本开始处的变量中,然后cd在脚本末尾使用来变回该位置。原始目录。

或者,也可以按照@ alroc's在其评论中的建议,使用push-locationpop-locationcmdlet存储和检索当前位置。


3
您不必将当前目录保存到变量;push-location在导入之前sqlps和导入pop-location之后使用,您就可以使用了。
alroc 2014年

@alroc我认为可能是类似的东西,但是我没有意识到。:)方便。
Ƭᴇcʜιᴇ007

7

这似乎对我有用:

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

1

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

仅作为参考,可能是从普通C:\>提示符触发SMO提示符(即PS SQLSERVER:>)的原因,是在没有Out-Null的情况下加载SMO程序集(out-null抑制了cmdlet返回的输出) )。

换句话说,为避免在加载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。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.