我有点像个新手。
因此,我创建了一个使用Restore-SqlDatabaseCommandlet 的脚本。但是,在我运行它之后,它使Powershell处于不同的状态。
PS D:\theFolder\> .\myRestoreDatabaseScript.ps1
... snip does the work ...
PS SQLSERVER:\>
如何使Powershell返回“正常”界面?
另外,PS SQLSERVER前缀叫什么?我为此尝试了Google,结果空白了。
我有点像个新手。
因此,我创建了一个使用Restore-SqlDatabaseCommandlet 的脚本。但是,在我运行它之后,它使Powershell处于不同的状态。
PS D:\theFolder\> .\myRestoreDatabaseScript.ps1
... snip does the work ...
PS SQLSERVER:\>
如何使Powershell返回“正常”界面?
另外,PS SQLSERVER前缀叫什么?我为此尝试了Google,结果空白了。
Answers:
摘自MS文章SQL Server PowerShell
•SQL Server提供程序,它启用类似于文件系统路径的简单导航机制。您可以构建类似于文件系统路径的路径,其中驱动器与SQL Server管理对象模型相关联,并且节点基于对象模型类。然后,您可以使用熟悉的命令(例如cd和dir)浏览路径,类似于在命令提示符窗口中浏览文件夹的方式。您可以使用ren或del等其他命令在路径中的节点上执行操作。
加载了像这样的提供程序后,您就可以像对待驱动器(字母)一样对待SQLServer。
因此,很可能您已经在代码中的某个地方CD移入了SQLServer提供程序(cd sqlserver:)。
如果您想重新d:\thefolder使用,请使用cd d:\thefolder。
如果要返回完成后的开始位置,则可能必须将当前目录位置存储到脚本开始处的变量中,然后cd在脚本末尾使用来变回该位置。原始目录。
或者,也可以按照@ alroc's在其评论中的建议,使用push-location和pop-locationcmdlet存储和检索当前位置。
只需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。
push-location在导入之前sqlps和导入pop-location之后使用,您就可以使用了。