0

У меня есть собственный командлет PowerShell, который я создал на C#, который закручивает некоторые экземпляры vstest.console.exe и публикует результаты теста в .trx-файле или в tfs , Этот командный файл работает изолированно при использовании PowerShell локально.Запуск удаленного командного элемента Powershell, который завершает процесс завершения до завершения

Однако, когда я бег commandlet удалено с помощью v3 PowerShell Remoting, ВЫЗОВ-команда завершается, но есть 2 проблемы: процесс запуска

  1. тест не завершается, как нет результатов файла, опубликованного
  2. я не получаю результаты на удаленной консоли, в то время как в локальном случае они пузыриться от вновь запущенных процессов

Вот удаленный вызова я в удаленной PowerShell вызова сценария

$j = Invoke-Command -Session $currentPSSession -AsJob -ScriptBlock { 
    Add-PSSnapin "IntegrationTestTools" 
    Start-IntegrationTests -someotherUnimportantArgs 
} | Wait-Job 

$results = $j | Receive-Job 

от выполнения сценария он действительно ждет задания, однако результаты пустые.

Отметьте, что у меня есть настройка на Keith Hill's post . Также у меня есть настройка Wsman с

set-item WSMan:\localhost\Shell\MaxMemoryPerShellMB 0 
set-item WSMan:\localhost\Shell\MaxProcessesPerShell 0 
set-item WSMan:\localhost\Shell\MaxShellsPerUser 0 

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

Любые идеи?

+1

Чтобы убедиться, что вы ссылаетесь на правильный объект задания, выполните это '$ job = Invoke-Command ... -AsJob ...'. Затем 'Wait-Job $ job' и' Receive-Job $ job'. Кроме того, является ли бит-бит snapin (32-разрядный или 64-разрядный)? –

+0

Спасибо Keith, я действительно изменил, как я получил объект задания до вашего ответа, я обновил выше. Snapin зарегистрирован как на x64, так и на x86 на целевой машине. Из диспетчера задач мониторинга процесс, который мой командный вызов вызывает, разворачивается ровно на 60 секунд, а затем уничтожается. Поэтому я пытаюсь определить, что вызывает этот тайм-аут. Знаете ли вы о каких-либо настройках WSMan, которые могут вызвать это для подпроцессов? – JoeKir

+0

Считаете ли вы, что это может быть причиной этого? http://msdn.microsoft.com/en-us/library/e0c5127e-b10c-4be5-9e03-346806fb7a28#endNote130 – JoeKir

ответ

2

Я думал, что делюсь тем, что кому-то повезло, чтобы это произошло в какой-то момент. Если вы используете credssp в качестве идентификационной информации при подключении к удаленному сеансу PowerShell, ваш токен пользователя помечен как «олицетворяющий», это означает, что вы являетесь частью группы NETWORK USER, что означает отсутствие видимости WCF-названий как SID 5-1 -5-2 (more commonly known as the Network SID) лишен доступа к именованным каналам. Вот просветительская статья по теме: KennyW's blog.

Процесс я удаленно, начиная с моей PowerShell commandlet начал дочерние процессы, которые при обмене данными по именованным каналам :(
Так что в конце концов пришлось psexec (Sysinternals) в качестве системы, чтобы получить этот процесс, чтобы выполнить локально в удаленной сессии ..! Не элегантный, но это было все, что я имел в наличии

Также благодаря Keith Hill за его помощь в устранении неполадок PowerShell

Мой блог статье подробно мои выводы - http://josephkirwin.com/2013/05/06/the-named-pipes-had-a-party-and-imposters-were-not-invited/