【问题标题】:SQL Server 2012 SQLPs Module - Changing current location automatically?SQL Server 2012 SQLPs 模块 - 自动更改当前位置?
【发布时间】:2012-10-16 13:00:23
【问题描述】:

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

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

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

这工作正常,但似乎SQLPs 模块在某些时候将当前位置更改为PS SQLSERVER> 而不是<local folder>,这使得我的许多其他命令都失败了。例如,如果我在网络驱动器上运行Test-Path,它在<local folder> 位置运行良好,但在SQLSERVER 位置运行会失败。

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

我担心的主脚本超过 1000 行,并且在我们进行此更改之前已经运行了两年多没有问题,所以如果可以的话,我想避免对其进行逐行测试。

【问题讨论】:

    标签: powershell sql-server-2012


    【解决方案1】:

    关于为什么在 sql 2012 中它正在更改为 SQLSERVER: 目录的更多信息...

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

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

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

    不清楚为什么(从逻辑的角度)它应该这样做。我们不想接触 SQL 服务器模块,所以我猜你需要在导入模块后做一个明确的设置位置。您也可以将其视为一种不那么 hacky 的解决方案。

    Push-Location
    Import-Module sqlps
    Pop-Location
    

    【讨论】:

    • +1 推荐Push-Location; Import-Module SQLPS; Pop-Location
    • ps;避免此处描述的警告:codykonior.com/2015/05/30/whats-wrong-with-sqlps 重定向警告流然后将其无效:push-location; import-module sqlps 3>&1 | out-null; pop-location
    • 仅供参考 - SQL 2016 SSMS SqlServer 模块修复了这个问题,让您走上更新频率更高的轨道。建议迁移...
    【解决方案2】:

    我已经通过添加cd <local folder> 作为脚本的第一行来突破提供程序解决了这个问题。 不过感觉很hackish。

    【讨论】:

    • 您只是在加载提供程序后添加cd <folder> 作为第一行?
    • 好吧,我会试一试,很快就会告诉你!
    • 我在主程序中添加了一个Set-Location,它似乎已经修复了!
    • 感谢@JorgeSandoval 解释原因。但是,我不会将其视为“不是缺陷”,主要是因为那不是我的用例。感谢您确认我们也没有疯。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2012-10-24
      • 2013-12-25
      • 2015-11-21
      • 1970-01-01
      • 1970-01-01
      • 2014-06-02
      • 2011-01-07
      • 2018-02-11
      • 1970-01-01
      相关资源
      最近更新 更多