在SQLPS之外使用SQL Server 2008 R2 PowerShell扩展的问题

Iri*_*can 14 powershell sql-server-2008

每当我通过在profile.ps1脚本中加载管理单元来启动PowerShell时,我都希望能够使用SQL Server PowerShell扩展.我在这里找到了一篇文章,其中有一个脚本示例,说明了如何执行此操作,这在我的32位Windows XP框中运行良好.

不幸的是,在我的64位Windows 7机器上,这种情况爆发了.如果我尝试使用64位PowerShell启动此脚本,我会得到:

Add-PSSnapin : No snap-ins have been registered for Windows PowerShell version 2.
At C:\Users\xxxx\Documents\WindowsPowerShell\profile.ps1:84 char:13
+ Add-PSSnapin <<<<  SqlServerCmdletSnapin100
+ CategoryInfo          : InvalidArgument: (SqlServerCmdletSnapin100:String
[Add-PSSnapin], PSArgumentException
+ FullyQualifiedErrorId : AddPSSnapInRead,Microsoft.PowerShell.Commands.AddPSSnapinCommand
Run Code Online (Sandbox Code Playgroud)

如果我在32位PowerShell中运行它,我得到:

Get-ItemProperty : Cannot find path 'HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds \Microsoft.SqlServer.Management.PowerShell.sqlps' because it does not exist.
At C:\Users\xxxx\Documents\WindowsPowerShell\profile.ps1:39 char:29
+     $item = Get-ItemProperty <<<<  $sqlpsreg
+ CategoryInfo          : ObjectNotFound: (HKLM:\SOFTWARE\...owerShell.sqlps:String) [Get-ItemProperty], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetItemPropertyCommand
Run Code Online (Sandbox Code Playgroud)

如果可能的话,我希望能够在64位PowerShell中运行它.为此,我追踪了我认为的Powershell扩展dll,并在64位管理员提升的PowerShell中运行:

cd "C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn"
installutil Microsoft.SqlServer.Management.PSProvider.dll
installutil Microsoft.SqlServer.Management.PSSnapins.dll
Run Code Online (Sandbox Code Playgroud)

没有骰子.尽管installutil似乎表明成功,但我仍然在运行脚本时收到"没有为Windows PowerShell版本2注册的管理单元"错误消息.

有人对我从这里去哪里有什么建议吗?

Cha*_*ler 20

我在x64机器上使用过这个脚本没有问题.x86调用的问题在于脚本会查找x64实例上只能从x64 PowerShell访问的注册表项.对于x64调用,您可以尝试注册snapins,因为这是您收到的错误消息.以管理员身份运行...

改变这个:

cd $sqlpsPath
Add-PSSnapin SqlServerCmdletSnapin100
Add-PSSnapin SqlServerProviderSnapin100 
Run Code Online (Sandbox Code Playgroud)

对此:

cd $sqlpsPath
$framework=$([System.Runtime.InteropServices.RuntimeEnvironment]::GetRuntimeDirectory())
Set-Alias installutil "$($framework)installutil.exe"
installutil Microsoft.SqlServer.Management.PSSnapins.dll
installutil Microsoft.SqlServer.Management.PSProvider.dll
Add-PSSnapin SqlServerCmdletSnapin100
Add-PSSnapin SqlServerProviderSnapin100    
Run Code Online (Sandbox Code Playgroud)

更好的解决方案是不使用add-pssnapin而是将sqlps转换为模块.我在这里有博客文章:http: //sev17.com/2010/07/10/making-a-sqlps-module

SQL Server 2012的更新 - 现在提供了一个sqlps模块,您可以安装而不是上面的博客:http://www.microsoft.com/en-us/download/details.aspx?id = 35580