Я пытаюсь запустить Powershell script на веб-сервере, на котором не установлена SQL Server Management Studio, но установлены все соответствующие пакеты из пакета обновления 2 (SP2) для Microsoft SQL Server 2008 R2. Вам нужно установить эти маленькие биты и куски, чтобы Powershell мог выполнять команды SQL.
Затем я запустил эту настройку script, которая предваряет вашу среду для команд SQL Server, запущенных с помощью Powershell:
$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 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
В Add-PSSnapin SqlServerCmdletSnapin100
script выходит из строя со следующей ошибкой:
Никаких оснасток не было зарегистрировано для Windows PowerShell версии 2. На C:\Vantiv\Initialize-SqlpsEnvironment.ps1: 75 char: 13 + Add-PSSnapin < SqlServerCmdletSnapin100 # -ErrorAction SilentlyContinue + CategoryInfo: InvalidArgument: (SqlServerCmdletSnapin100: String) [Добавить-PSSnapin], исключение PSArgumentException + FullyQualifiedErrorId: AddPSSnapInRead, Microsoft.PowerShell.Commands.AddPSSnapinCommand
Я запустил поиск Google по этой ошибке, и единственным решением, которое я смог найти, было то, что люди говорили, что моя 64-разрядная консоль Powershell Console была указана на каталог SysWOW64, а не на System32. Это не относится ко мне. Мой указывает на System32.
Любые идеи? Что мне нужно сделать, чтобы заставить Powershell зарегистрировать эти оснастки?