0

PowerShell で Microsoft.SqlServer.Management.Smo.Mail.MailServer クラスのオブジェクトを作成しようとしています。これを行う必要があるのは、PowerShell を使用して SQL の新しいインスタンスで DBMail をセットアップしようとしているためです。デフォルトのメール サーバーで MailAccount を正常に作成できました。しかし、私は自分自身を作成する必要があります。

誰かが例や参照を指摘するのを手伝ってくれませんか.

4

1 に答える 1

1

この SQLServerCentral.com の記事から引用:

# Step 1 - Set variables for mail options. 
  $sqlServer = 'YourServerName'
  $accountName = 'dbMailDefaultAcct'
  $accountDescription = 'Default dbMail Account'
  $originatingAddress = "$sqlServer@yourDomain.com"
  $replyToAddress = 'DO_NOT_REPLY@yourDomain.com'
  $smtpServer = 'smtpServer.yourDomain.com'
  $profileName = 'dbMailDefaultProfile'
  $profileDescription = 'Default dbMail profile'

# Step 2 - Load the SMO assembly and create the server object, connecting to the server.
  [System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | Out-Null
  $server = New-Object 'Microsoft.SqlServer.Management.SMO.Server' ($sqlServer)

# Step 3 - Configure the SQL Server to enable Database Mail.
  $server.Configuration.DatabaseMailEnabled.ConfigValue = 1
  $server.Configuration.Alter()

# Step 4 - Alter mail system parameters if desired, this is an optional step.
  $server.Mail.ConfigurationValues.Item('LoggingLevel').Value = 1
  $server.Mail.ConfigurationValues.Item('LoggingLevel').Alter()

# Step 5 - Create the mail account. 
# ArgumentList contains the mail service, account name, description, 
# display name and email address.
  $account = New-Object -TypeName Microsoft.SqlServer.Management.SMO.Mail.MailAccount `
   -Argumentlist $server.Mail, $accountName, $accountDescription, $sqlServer, $originatingAddress 
  $account.ReplyToAddress = $replyToAddress 
  $account.Create()

# Step 6 - Set the mail server now that the account is created.
  $account.MailServers.Item($sqlServer).Rename($smtpServer)
  $account.Alter()

# Step 7 - Create a public default profile. 
# ArgumentList contains the mail service, profile name and description.
  $mailProfile = New-Object -TypeName Microsoft.SqlServer.Management.SMO.Mail.MailProfile ` 
   -ArgumentList $server.Mail, $profileName, $profileDescription
  $mailProfile.Create()

# Step 8 - Associate the account to the profile and set the profile to public
  $mailProfile.AddAccount($accountName, 0)
  $mailProfile.AddPrincipal('public', 1)
  $mailProfile.Alter()

# Step 9 - Configure the SQL Agent to use dbMail.
  $server.JobServer.AgentMailType = 'DatabaseMail'
  $server.JobServer.DatabaseMailProfile = $profileName
  $server.JobServer.Alter()

[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO')私は を使用しませんが、ほとんどの人は 使用することに注意してください。

例として SQL Server 2014 を使用すると、次のようになります。

Add-Type -Path 'C:\Program Files (x86)\Microsoft SQL Server\120\SDK\Assemblies\Microsoft.SqlServer.Smo.dll';

または:

Add-Type -AssemblyName 'Microsoft.SqlServer.Smo, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91';

これらは両方とも、アセンブリの SQL Server 2014 バージョンを明示的に呼び出し、正しいバージョンを明示的に呼び出すことは、通常行うべきことです。間違ったバージョンのアセンブリが読み込まれると、ちょっとしたことがわかります。欠点は、SQL Server 2012、2008 などで作業している場合、コードを変更する必要があることです。

「どのアセンブリにこの名前空間が含まれているか」という質問に対する一般的な回答については、目的のコードを含むクラスの MSDN ページのコメントを参照してください。

于 2016-06-18T16:45:16.383 に答える