13

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にこれらのスナップインを登録させるには何をする必要がありますか?

4

3 に答える 3

9

もし、するなら:

Get-PSSnapin -Registered

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

これらのスナップインがリストに表示されない場合は、ここに掲載されている解決策を試してください。

于 2012-11-09T16:15:09.130 に答える
3

上記の回答と少し似ていますが、デフォルトでは32ビットで実行されるVisualStudioコマンドプロンプトを使用していることがわかりました。

したがって、PowerShellライブラリに対して「InstallUtil」を使用すると、32ビットバージョンのPowershellに登録が行われたため、-Registeredコレクションにコマンドレットが見つからないことに混乱しました。

その後、PowerShell(x86)を起動した場合、スナップインは実際に期待どおりに登録されました。したがって、私にとっての解決策は、x64コマンドプロンプトからスナップインを再登録するか、単にx86バージョンのPowerShellを使用することでした。

于 2013-01-16T15:33:50.250 に答える
0

私の修正は、レジストリキーを動作中のサーバーから問題のあるサーバーにWindows Server 2008 R2 PowerShellコピーすることでした。PowerShell

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\ 

問題が解決しました。これSharePoint PowerShellでスナップインが登録され、インストールされたスナップインが機能しSharePointます。

于 2016-01-23T15:21:38.997 に答える