VB.NET Powershell передает результаты от одной команды к другой - PullRequest
1 голос
/ 08 декабря 2010

У меня в настоящее время есть программирование на 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

1 Ответ

0 голосов
/ 10 марта 2011

Оказывается, проблема заключалась в том, что пользователь, используемый для запуска пула приложений, не имел прав доступа к базам данных Exchange.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...