none
Определение списка серверов Exchange. Powershell RRS feed

  • Вопрос

  • Добрый день, в некоторых скриптах на PS я использую конструкцию:

    $ConnectionURI = "http://server1.domain.local/PowerShell/"
    $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri $ConnectionURI -Authentication Kerberos
    Import-PSSession $Session

    Проблема в том, что сервера частенько выключают, поэтому PS-сессия не создается и скрипт не отрабатывает.

    При этом остаются доступными другие сервера, к которым я мог бы подключиться.

    Каждый раз править тело скрипта, изменяя ConnectionURI, неудобно, поэтому вопрос.

    Как в PS-скрипте можно получить список всех доступных серверов Exchange?

    Дальше я мог бы пройти по списку и создать удаленную PS-сессию с одним из доступных.

    Буду благодарен за помощь.

    19 июля 2012 г. 12:56

Ответы

  • Дмитрий, как вариант могу вам предложить следующее решение

    Get-ADGroupMember "Exchange Servers" |Where-Object {$_.objectclass -eq "computer"}| ForEach-Object {get-adcomputer $_.name}|ft DNSHostName
    $mail=$null
    while ($mail -eq $Null){
     $mail=New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri ("http://" +$Exch[$i%$Exch.count]+"/Powershell/")
     $i++
    }

    Ну и естественно перед всем надо поимпортировать модуль ActiveDirectory.

    • Изменено Sidorenko Andrey 19 июля 2012 г. 13:23
    • Помечено в качестве ответа Dmitry Zobnin 20 июля 2012 г. 6:08
    19 июля 2012 г. 13:22

Все ответы

  • Дмитрий, как вариант могу вам предложить следующее решение

    Get-ADGroupMember "Exchange Servers" |Where-Object {$_.objectclass -eq "computer"}| ForEach-Object {get-adcomputer $_.name}|ft DNSHostName
    $mail=$null
    while ($mail -eq $Null){
     $mail=New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri ("http://" +$Exch[$i%$Exch.count]+"/Powershell/")
     $i++
    }

    Ну и естественно перед всем надо поимпортировать модуль ActiveDirectory.

    • Изменено Sidorenko Andrey 19 июля 2012 г. 13:23
    • Помечено в качестве ответа Dmitry Zobnin 20 июля 2012 г. 6:08
    19 июля 2012 г. 13:22
  • Андрей, спасибо за скрипт, он помог. Пришлось его слегка изменить, т.к.  Get-ADGroupMember и Get-ADComputer по умолчанию не ищут в других доменах, а у нас есть иерархия. Пришлось явно указывать параметр -Server.

    В итоге у меня получился такой скрипт: 

    write-host "Получаем список серверов Exchange"
    $ExchServers = $(Get-ADGroupMember 'Exchange Servers' -Server "domain.local" `
                    | Where-Object {$_.objectclass -eq "computer"} `
                      | ForEach-Object {get-adcomputer $_.name -server "sub.domain.local"} `
                        | ForEach-Object {$_.DNSHostName})
    $i = 0
    $Session = $null
    #Проходим по списку и пытаемся создать удаленную PS-сессию до сервера
    do {
      write-host "Попытка создать PSSession до сервера $($ExchServers[$i])"
      $Session = New-PSSession `
                    -ConfigurationName Microsoft.Exchange `
                    -ConnectionUri ("http://" +$ExchServers[$i]+"/Powershell/") `
                    -ErrorAction SilentlyContinue
      $i++
    }
    until ($Session -or ($i -eq $ExchServers.count))
    if ($Session) {
       write-host "Удаленная PS-сессия создана"
       $Session
    }
    Import-PSSession $Session -AllowClobber | Out-Null



    20 июля 2012 г. 6:05