У меня в настоящее время есть программирование на ASP.NET, создающее Powershell CmdLet для создания почтового ящика взамен.
У меня иногда возникает проблема с тем, что не удается создать почтовый ящик, потому что "он не может найти" указанную мной базу данных Exchange.
Итак, я пытаюсь запустить Get-Mailbox, а затем передать результаты в команду Enable-Mailbox.
Ниже приведен код, который я использую для этого:
Public Sub CreateMailbox()
Dim getMailbox As Command
getMailbox = GetMailboxCommand()
Dim createCommand As Command
createCommand = GetCreateCommand()
Dim results As String
results = RunCommand(createCommand, getMailbox)
Dim setCommand As Command
setCommand = GetSetCommand()
results = RunCommand(setCommand)
End Sub
Это команда для получения почтового ящика:
Private Function GetMailboxCommand() As Command
Dim cmd As New Command("Get-Mailbox")
cmd.Parameters.Add("Database", UserDatabase)
Return cmd
End Function
Команда для создания почтового ящика:
Private Function GetCreateCommand() As Command
Dim cmd As New Command("Enable-Mailbox")
cmd.Parameters.Add("Identity", DistinguishedName)
cmd.Parameters.Add("Database")
cmd.Parameters.Add("Alias", UserAlias)
cmd.Parameters.Add("PrimarySmtpAddress", PrimarySMTP)
Return cmd
End Function
Код для выполнения всех команд powershell:
Private Function RunCommand(ByVal createCommand As Command, ByVal getMailbox As Command) As String
'Create Runspace configuration
Dim rsConfig As RunspaceConfiguration
rsConfig = RunspaceConfiguration.Create()
Dim snapInException As PSSnapInException = Nothing
Dim info As PSSnapInInfo
info = rsConfig.AddPSSnapIn("Microsoft.Exchange.Management.PowerShell.Admin", snapInException)
Dim myRunSpace As Runspace
myRunSpace = RunspaceFactory.CreateRunspace(rsConfig)
myRunSpace.Open()
Dim pipeLine As Pipeline
pipeLine = myRunSpace.CreatePipeline()
pipeLine.Commands.Add(getMailbox)
pipeLine.Commands.Add(createCommand)
pipeLine.Commands.Add("Out-String")
Dim commandResults As Collection(Of PSObject)
commandResults = pipeLine.Invoke()
myRunSpace.Close()
Dim sb As String = "Results: "
For Each result As PSObject In commandResults
sb &= result.ToString
Next
Return sb
End Function