SQL Server の既定のインスタンス ( ) を持つサーバーで実行するとうまく動作する PowerShell スクリプトがありますが、名前付きインスタンス ( )MSSQLSERVER
を持つサーバーでは同じスクリプトが失敗します。MSSQL$instance
デフォルトのインスタンス ( MSSQLSERVER
)の場合
[Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo")
$service = Get-service -name 'MSSQLSERVER'
$status = $service.status
$CreateDB = "db-Test"
if ( $status -eq "Running" )
{
'Success' | Out-File -FilePath c:\sqltest.log -Encoding ASCII
$srv = new-Object Microsoft.SqlServer.Management.Smo.Server("(local)")
$db = New-Object Microsoft.SqlServer.Management.Smo.Database($srv, "$CreateDB")
$db.Create()
$db.CreateDate
}
else
{
'Failed' | Out-File -FilePath c:\sqltest.log -Encoding ASCII
}
上記のスクリプトは非常にうまく機能します。しかし、以下のスクリプトはエラーをスローします:
名前付きインスタンスの場合:
[Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo")
$service = Get-service -name 'MSSQL$instancename'
$status = $service.status
$CreateDB = "db-Test"
if ( $status -eq "Running" )
{
'Success' | Out-File -FilePath c:\sqltest.log -Encoding ASCII
$srv = new-Object Microsoft.SqlServer.Management.Smo.Server("(local)")
$db = New-Object Microsoft.SqlServer.Management.Smo.Database($srv, "$CreateDB")
$db.Create()
$db.CreateDate
}
else
{
'Failed' | Out-File -FilePath c:\sqltest.log -Encoding ASCII
}
名前付き SQL インスタンスの上記のスクリプトは、以下のエラーをスローします。
New-Object : "2" 個の引数を指定して ".ctor" を呼び出し中に例外が発生しました: "SetParent がデータベース 'Netmagic-Test' で失敗しました。"
At C:\mssql-test.ps1:11 char:7
+ $db = New -オブジェクト Microsoft.SqlServer.Management.Smo.Database($srv, "$CreateDB")
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: ( :) [新しいオブジェクト]、MethodInvocationException
+ FullyQualifiedErrorId : ConstructorInvokedThrowException、Microsoft.PowerShell.Commands.NewObjectCommandnull 値の式でメソッドを呼び出すことはできません。
C:\mssql-test.ps1:12 char:1
+ $db.Create()
+ ~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) []、RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
ありがとう、
ウイルス性