0

我有一个 PowerShell 脚本,当我在具有 SQL Server 默认实例 () 的服务器上运行它时效果很好,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 实例的上述脚本引发以下错误:

新对象:使用“2”参数调用“.ctor”的异常:“数据库'Netmagic-Test'的 SetParent 失败。”
在 C:\mssql-test.ps1:11 char:7
+ $db = New -Object Microsoft.SqlServer.Management.Smo.Database($srv, "$CreateDB")
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: ( :) [New-Object],MethodInvocationException
+ FullyQualifiedErrorId:ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand

您不能在空值表达式上调用方法。
在 C:\mssql-test.ps1:12 char:1
+ $db.Create()
+ ~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull

错误屏幕

谢谢,

病毒性的

4

0 回答 0