我有一个大型的现有powershell脚本库,主要用于运行一些复杂的逻辑和Server与文件系统之间的交互。
SQL交互通常通过cmdlet Invoke-SQLCmd执行。
最近,我所有服务器上的SSMS版本都升级到了2012年。这意味着我必须对我的代码做一些修改,以删除对sqlserverprovidersnapin100和sqlservercmdletsnapin100的引用,因为这些引用在2012年被取消,以支持导入SQLPs模块。
这是可行的,但SQLPs模块似乎在某个时候将当前位置更改为PS SQLSERVER>而不是<local folder>,这使得我的许多其他命令都失败了。例如,如果我在网络驱动器上运行Test-Path,它在<local folder>位置运行良好,但从SQLSERVER位置运行将失败。
,这是一个已知的问题吗?有什么解决办法或设置可以更改吗?
我所担心的主要脚本是1000多行,在我们做出这个更改之前,它已经运行了两年多了,所以如果可以的话,我想避免逐行测试它。
发布于 2012-10-16 14:30:27
我通过添加一个cd <local folder>作为脚本的第一行来解决这个问题。不过感觉有点无趣。
发布于 2013-01-08 00:55:59
关于为什么在sql 2012中它改变为SQLSERVER:目录的更多信息.
当powershell导入sqlps模块时,清单定义了一个名为SqlPsPostScript.ps1的post文件。此文件(第一行)将当前位置更改为SQLSERVER: provider
在x64位框中,模块位于-C:\程序文件(x86)\Microsoft \110\Tools\PowerShell\Modules\SQLPS。
在powershell 3.0中,自动导入会使人很难判断何时会发生这种情况(根据我的经验)。
它不清楚为什么(从逻辑的角度)它应该这样做。我们不想接触SQL服务器模块,所以我想您需要在导入模块之后执行一个显式的设置位置。您也可以把这看作是一个稍微不那么烦琐的解决方案。
Push-Location
Import-Module sqlps
Pop-Location发布于 2019-12-16 10:46:14
通过使用我试图复制的文件的PSPath属性(包含Microsoft.PowerShell.Core\FileSystem::)来解决类似的问题,而不是使用默认属性。希望能帮上忙!
https://stackoverflow.com/questions/12915299
复制相似问题