Powershell SQL Server 2012 SQLPs模块-是否自动更改当前位置?

Powershell SQL Server 2012 SQLPs模块-是否自动更改当前位置?,powershell,sql-server-2012,Powershell,Sql Server 2012,我有一个大型的现有powershell脚本库,主要用于在SQL Server和文件系统之间运行一些复杂的逻辑和交互 SQL交互通常通过cmdletInvoke-SQLCmd执行 最近,我所有服务器上的SSMS版本都升级到了2012年。这意味着我必须对代码进行一些更改,以删除对sqlserverprovidersnapin100和sqlservercmdletsnapin100的引用,因为这些引用在2012年被弃用,转而导入SQLPs模块 这工作正常,但是SQLPs模块似乎在某个时候将当前位置更改

我有一个大型的现有powershell脚本库,主要用于在SQL Server和文件系统之间运行一些复杂的逻辑和交互

SQL交互通常通过cmdlet
Invoke-SQLCmd
执行

最近,我所有服务器上的SSMS版本都升级到了2012年。这意味着我必须对代码进行一些更改,以删除对
sqlserverprovidersnapin100
sqlservercmdletsnapin100
的引用,因为这些引用在2012年被弃用,转而导入
SQLPs
模块

这工作正常,但是
SQLPs
模块似乎在某个时候将当前位置更改为
pssqlserver>
,而不是
,这使得我的许多其他命令失败。例如,如果我在网络驱动器上运行
测试路径
,它在
位置工作正常,但在
SQLSERVER
位置将失败

这是一个已知问题吗?是否有解决方法或设置可以更改?


我担心的主脚本有1000多行,在我们进行此更改之前,它已经运行了两年多没有任何问题,因此如果可以的话,我希望避免对它进行逐行测试。

我通过添加一张
cd
作为脚本的第一行来解决此问题,以突破提供程序。
不过感觉有点黑客味。

关于为什么在sql 2012中它会改为SQLSERVER:directory的更多信息

当powershell导入sqlps模块时,清单定义了一个名为SqlPsPostScript.ps1的post脚本文件。此文件(第一行)将当前位置更改为SQLSERVER:provider

在x64位框上,模块位于-C:\Program Files(x86)\Microsoft SQL Server\110\Tools\PowerShell\Modules\SQLPS

根据我的经验,在powershell 3.0中,自动导入会导致很难判断何时会发生这种情况

不清楚为什么(从逻辑角度)它应该这样做。我们不想接触SQL server模块,所以我想您需要在导入模块后进行显式的设置位置。您还可以将此视为一种解决方案,它的黑客性稍微低一点

推送位置
导入模块sqlps
流行位置

我通过使用试图复制的文件的PSPath属性(包含Microsoft.PowerShell.Core\FileSystem::)而不是默认属性,解决了类似的问题。
希望有帮助

加载提供程序后,您只需将
cd
添加为第一行?好的,我会尝试一下,并很快通知您!我在我的主程序中放入了一个
设置位置
,它似乎已经修复了它!感谢@JorgeSandoval解释原因。然而,我并不认为这是“非缺陷”,主要是因为这不是我的用例。感谢您确认我们不疯狂。+1建议
推送位置;导入模块SQLPS;Pop位置
ps;要避免此处描述的警告:重定向警告流,然后使其无效:
push location;导入模块sqlps 3>&1;输出空值;pop位置
FYI-SQL 2016 SSMS SqlServer模块修复了此问题,并使您走上更新频率更高的轨道。建议迁移。。。