SQL Server Management StudioがインストールされていないWebサーバーでPowershellスクリプトを実行しようとしていますが、Microsoft SQL Server 2008 R2 SP2FeaturePackの関連するすべてのパッケージがインストールされています。PowershellでSQLコマンドを実行できるようにするには、これらの小さな要素をインストールする必要があります。
次に、Powershellで実行されるSQLServerコマンドの環境を準備する次のセットアップスクリプトを実行しました。
$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
で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コンソールショートカットがSystem32ではなくSysWOW64ディレクトリを指していると言われていることでした。これは私には当てはまりません。私はSystem32を指しています。
何か案は?Powershellにこれらのスナップインを登録させるには何をする必要がありますか?