Lync/S4f/Exchange 서버에서 원격 powershell을 실행하고 있습니다. 동기 작업은 모두 정상적으로 작동하지만 비공식으로 변환하는로드 블록이 발생했습니다.Powershell 원격 파이프 라인에서 Pipeline.AsyncInvoke
RunSpace가 표준 BeginOpen/EndOpen 및 BeginClose/EndClose 작업을 제공하기 때문에 연결/연결 비동기를 만들지 만 InvokeAsync는 void 유형입니다. 여기
내 코드입니다 (에서 ConnectionInfo는new Uri("https://" + config.Server + "/ocspowershell")
을 다음과 그리고 이것은 실제 원격 실행 코드 여기
Runspace myRunSpace = RunspaceFactory.CreateRunspace(connectionInfo);
myRunSpace.Open();
using (Pipeline pipeLine = myRunSpace.CreatePipeline())
{
Command myCommand = new Command("Get-CsArchivingPolicy");
pipeLine.Commands.Add(myCommand);
pipeLine.StateChanged += PipeLine_StateChanged;
waiter = new TaskCompletionSource<Collection<PSObject>>();
pipeLine.Error.DataReady += Error_DataReady;
pipeLine.Output.DataReady += Output_DataReady;
pipeLine.InvokeAsync();
pipeLine.Input.Close();
await waiter.Task.ConfigureAwait(false);
}
그대로 URI 세트를 가지고 WSManConnectionInfo 내가 ..보고 만약있어 무엇이다 입력을 닫지 않고 실행중인 상태가 아닌 파이프 라인이 실행됩니다.
입력을 닫는 즉시 Error_DataReady 0 개의 항목을 읽고 EndOfPipeline을 true로 설정하면 EndOfPipeline이 true이지만 Count도 0이되므로 Output_DataReady를 얻습니다. 따라서 Reader에서 Read를 호출해도 작동하지 않습니다.
그러면 파이프 라인이 완료 됨 상태가됩니다. 그래서 .. 명령이 실행됩니다 .. 그러나 출력은 어디 있습니까?
내가 파이프 라인을 수행하면. 내 결과로 멋진 콜렉션을 얻을 수 있습니다 .. 그래서 명령이 정확하다는 것을 압니다. 하지만 비동기 모드에서 실행할 때 출력과 관련하여 뭔가 빠져 있어야합니다.
Exchange'pipeLine.Input.Close();'와'pipeLine.InvokeAsync();'. – PetSerAl
실행이가는 한 그 속임수는 ... 하지만 reder.Read (reader.Count = PipelineReader에서 Output_DataReady에서 가져온 메서드는 항상 메소드가 지원되지 않는다는 예외를 throw합니다 (reader.ReadToEnd에서도 마찬가지입니다). 어떻게하면 올바르게 알지 못할 것입니다. 결과를 읽으시겠습니까? –
user3566056