我有一个我在C#中创建的自定义PowerShell命令行开关,它会旋转一些vstest.console.exe实例,并将测试结果发布到.trx文件或tfs。 在本地使用PowerShell时,此命令行开关是独立工作的。
但是,当我使用v3 PowerShell远程处理远程运行命令行开关时,invoke-command完成,但有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
所以进程和允许的记忆不应该限制这个特定的练习。
有什么想法吗?
答案 0 :(得分:2)
我想我会分享以防万一有人不幸在某些时候发生这种情况。如果在连接到远程PowerShell会话时使用credssp作为身份验证枚举,则您的用户令牌被标记为“impersonate”,这意味着您是NETWORK USER组的一部分,这意味着不能将WCF命名管道作为SID 5-1的可见性-5-2(more commonly known as the Network SID)被拒绝访问命名管道。这是关于这个主题的启发性文章:KennyW's blog。
我从PowerShell命令行开始远程启动的进程启动了通过命名管道进行通信的子进程:(
因此最终必须将psexec(sysinternals)作为系统来使该进程在远程会话中本地执行。不优雅,但这是我所有的。
还要感谢Keith Hill对PowerShell疑难解答的帮助!
我的博客文章详细介绍了我的发现 - http://josephkirwin.com/2013/05/06/the-named-pipes-had-a-party-and-imposters-were-not-invited/