2016-06-17 5 views
0

Я пытаюсь создать объект класса Microsoft.SqlServer.Management.Smo.Mail.MailServer в PowerShell. Причина, по которой мне нужно это сделать, - это то, что я пытаюсь настроить DBMail на новый экземпляр SQL с помощью PowerShell. Я успешно могу создать MailAccount с почтовым сервером по умолчанию. Но мне нужно создать свою собственную.Как создать объект класса Microsoft.SqlServer.Management.Smo.Mail.MailServer?

Может ли кто-нибудь помочь мне указать на любой пример или ссылку.

ответ

1

Взятые из this SQLServerCentral.com article:

# Step 1 - Set variables for mail options. 
    $sqlServer = 'YourServerName' 
    $accountName = 'dbMailDefaultAcct' 
    $accountDescription = 'Default dbMail Account' 
    $originatingAddress = "[email protected]" 
    $replyToAddress = '[email protected]' 
    $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 и т. Д.

Для получения общего ответа на вопрос о том, «какая сборка содержит это пространство имен», вы можете увидеть в remarks on the MSDN page for the class, который сборка содержит код, который вы используете.