没有为Windows PowerShell版本2注册管理单元

cra*_*mmy 12 powershell pssnapin sql-server-2008

我正在尝试在未安装SQL Server Management Studio但已安装Microsoft SQL Server 2008 R2 SP2 Feature Pack的所有相关软件包的Web服务器上运行Powershell脚本.您需要安装这些小块,以便Powershell能够运行SQL命令.

然后我运行了这个安装脚本,为使用Powershell运行的SQL Server命令准备环境:

$ErrorActionPreference = "Stop"

$sqlpsreg="HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.SqlServer.Management.PowerShell.sqlps"

if (Get-ChildItem $sqlpsreg -ErrorAction "SilentlyContinue")
{
    throw "SQL Server Powershell is not installed."
}
else
{
    $item = Get-ItemProperty $sqlpsreg
    $sqlpsPath = [System.IO.Path]::GetDirectoryName($item.Path)
}



/* Preload the assemblies. Note that most assemblies will be loaded when the provider
 is used. if you work only within the provider this may not be needed. It will reduce
 the shell's footprint if you leave these out.*/

$assemblylist =
"Microsoft.SqlServer.Smo",
"Microsoft.SqlServer.Dmf ",
"Microsoft.SqlServer.SqlWmiManagement ",
"Microsoft.SqlServer.ConnectionInfo ",
"Microsoft.SqlServer.SmoExtended ",
"Microsoft.SqlServer.Management.RegisteredServers ",
"Microsoft.SqlServer.Management.Sdk.Sfc ",
"Microsoft.SqlServer.SqlEnum ",
"Microsoft.SqlServer.RegSvrEnum ",
"Microsoft.SqlServer.WmiEnum ",
"Microsoft.SqlServer.ServiceBrokerEnum ",
"Microsoft.SqlServer.ConnectionInfoExtended ",
"Microsoft.SqlServer.Management.Collector ",
"Microsoft.SqlServer.Management.CollectorEnum"


foreach ($asm in $assemblylist)
{
    $asm = [Reflection.Assembly]::LoadWithPartialName($asm)
}


//Set variables that the provider expects (mandatory for the SQL provider)

Set-Variable -scope Global -name SqlServerMaximumChildItems -Value 0
Set-Variable -scope Global -name SqlServerConnectionTimeout -Value 30
Set-Variable -scope Global -name SqlServerIncludeSystemObjects -Value $false
Set-Variable -scope Global -name SqlServerMaximumTabCompletion -Value 1000


//Load the snapins, type data, format data

Push-Location
cd $sqlpsPath


Add-PSSnapin SqlServerCmdletSnapin100
Add-PSSnapin SqlServerProviderSnapin100 
Update-TypeData -PrependPath SQLProvider.Types.ps1xml  
update-FormatData -prependpath SQLProvider.Format.ps1xml  
Pop-Location
Run Code Online (Sandbox Code Playgroud)

Add-PSSnapin SqlServerCmdletSnapin100,脚本失败并出现以下错误:

没有为Windows PowerShell版本2注册管理单元.在C:\ Vantiv\Initialize-SqlpsEnvironment.ps1:75 char:13 + Add-PSSnapin <<<< SqlServerCmdletSnapin100#-ErrorAction SilentlyContinue + CategoryInfo:InvalidArgument:(SqlServerCmdletSnapin100:字符串)[Add-PSSnapin],PSArgumentException + FullyQualifiedErrorId:AddPSSnapInRead,Microsoft.PowerShell.Commands.AddPSSnapinCommand

我针对此错误运行了Google搜索,我找到的唯一解决方案就是人们说我的64位Powershell控制台快捷方式指向SysWOW64目录而不是System32.对我来说情况并非如此.我指向System32.

有任何想法吗?要让Powershell注册这些管理单元,我需要做些什么?

CB.*_*CB. 8

如果你这样做:

Get-PSSnapin -Registered
Run Code Online (Sandbox Code Playgroud)

您将获得PowerShell的即用型管理单元列表(这里只是SQL的管理单元):

Name        : SqlServerCmdletSnapin100
PSVersion   : 2.0
Description : This is a PowerShell snap-in that includes various SQL Server cmdlets.

Name        : SqlServerProviderSnapin100
PSVersion   : 2.0
Description : SQL Server Provider
Run Code Online (Sandbox Code Playgroud)

如果您无法在列表中看到这些管理单元,请尝试此处发布的解决方案.