2015-06-03 3 views
1

Я пытаюсь получить статус всех TransportAgents с удаленного сервера Exchange через Windows Powershell.Exchange Remote Powershell получает спорадическое состояние «Broken»

Я спорадически получаю сообщение об ошибке, что The session state is Broken. После того, как она сломана мне нужно создать новую сессию

Ниже список команд я использую (в правильном порядке)

# Build the PSSession for Exchange 
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://<SERVER>/PowerShell/ -Authentication Default 
# Invoke the command 'Get-TransportAgent' on the remote PSSession 
Invoke-Command $Session {Get-TransportAgent} 
# Result when there is NO ERROR 
Identity           Enabled   Priority  PSComputerName 
--------           -------   --------  -------------- 
Transport Rule Agent        True   1    <SERVER> 
Malware Agent          True   2    <SERVER> 
Text Messaging Routing Agent      True   3    <SERVER> 
Text Messaging Delivery Agent      True   4    <SERVER> 

Когда я повторить команду Invoke-Command $Session {Get-TransportAgent} следующая ошибка произошла спорадически:

Invoke-Command : Because the session state for session Session9, <GUID-REMOVED>, <SERVER> is not equal to Open, you cannot run a command in the session. The session state is Broken. At line:1 char:1 

UPDATE

После добавления IdleTimeout в SessionOption Я recev ИНГ ошибку ниже следуют сессии сломана

Invoke-Command $Session {Get-TransportAgent} 
Starting a command on the remote server failed with the following error 
message : The I/O operation has been aborted because of either a thread exit or an application request. For more information, see the about_Remote_Troubleshooting 
Help topic. 
+ CategoryInfo   : OperationStopped: (<SERVER>:String) [], PSRemotingTransportException 
+ FullyQualifiedErrorId : JobFailure 
+ PSComputerName  : <SERVER> 

Вопрос: Почему возникает ошибка и как решить эту проблему?

ответ

2

Скорее всего, ваша сессия не работает. Чтобы исправить это, создайте объект PSSessionOption с увеличенным значением тайм-аута сеанса, который затем можно будет передать командлету New-PSSession. Таймаут по умолчанию - 60000 миллисекунд (1 минута), который может быть довольно небольшим, если вы используете расширенный скрипт, который содержит асинхронные запросы или просто работает очень долго.

$so = New-PSSessionOption -IdleTimeout 600000 
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://<SERVER>/PowerShell/ -Authentication Default -SessionOption $so 

Этого SessionOption объект сделает ваш $session остается открытым в течение 10 минут после последнего выполнения команды.

EDIT: После прочтения руководства по Powershell удаленной сессии говорится, я обнаружил, что Broken ненормальное состояние, которое возникает не от холостого хода или других локальных действий, а скорее свидетельствует о потере связи между хостами, участвующими, или проблем с запуском «wsmprovhost» на стороне сервера. Вы должны исследовать, здоровы ли ваша ОС и сеть. Сценарий может обрабатывать такие ошибки, чтобы сделать это, вы должны проверить состояние сеанса, а если это не Opened, повторите открытие сеанса.

if ($session.state -ne "Opened") { 
    Write-Host "The session went into $($session.state) state! Reinitializing!" 
    $session=New-PSSession <arguments skipped> 
} 

Тем не менее, если переподключение попытка будет бросить тайм-аут, то выручать из вашего сценария, как вы не можете действительно сделать больше Remoting без подключения.

+0

Он по-прежнему дает мне ошибку (см. Мой обновленный вопрос) менее чем за 10 минут, я также проверю другие SessionOptions - спасибо –

+0

Мне удалось выяснить, что если есть какие-либо сетевые разъединения по обе стороны от PSSession, сеанс прерывается. Вы можете отлаживать связь между локальными и удаленными серверами. Модификация скрипта возможна, так что если '$ session.state' не' open', вы можете поручить сценарию воссоздать объект сеанса. – Vesper

+1

Я восстановил, что на удаленном сервере установлено плохое соединение (проблема с задержкой по сети, проблема с локальной сетью), и это вызывает состояние «Broken». - Я дам ему последний шанс, используя флаг -NoEncryption и -NoCompression. еще раз спасибо –

 Смежные вопросы

  • Нет связанных вопросов^_^