응용 프로그램에 상당히 제한된 PowerShell 지원을 추가하려고합니다. 사용자 정의 PowerShell 스크립트를 주기적으로 실행하고 결과 및 (결국) 진행 통지 및 사용자 프롬프트 요청을 처리 할 수 있어야합니다. I 은 명령 줄 스타일의 대화식 지원이 필요하거나 원격 스크립트 나 여러 개의 동시 스크립트를 실행할 수있는 기능이 필요하지 않습니다. 사용자 스크립트가 자체 호스트 I에서 자체 스크립트를 수행하지 않는 한. 궁극적으로 비동기 적으로 또는 백그라운드 스레드에서 스크립트를 실행하고 일부 초기 변수와 함께 쉘을 시드하려는 경우 어쩌면 cmdlet하지만이 기능은 "좋아"할 것 같습니다.Hosting PowerShell : PowerShell vs. Runspace vs. RunspacePool vs. 파이프 라인
나는 MSDN documentation about writing host application code를 읽고,하지만 행복하게는 Runspace
, 또는 RunspacePool
, 또는 Pipeline
을 PowerShell
객체를 만들거나하는 방법을 을 설명하면서, 약 하나 이상의 이러한 방법 중 하나를 선택하는 이유 징후가 없다 봤는데 다른.
나는 나는이 두 가지 중 하나를 아래라고 생각 ,하지만 난 방법은 더 나은 사람이 걸릴 인에 대한 몇 가지 의견을 같이했습니다 :
PowerShell shell = PowerShell.Create();
shell.AddCommand(/* set initial state here? */);
shell.AddStatement();
shell.AddScript(myScript);
shell.Invoke(/* can set host! */);
나 :
Runspace runspace = RunspaceFactory.CreateRunspace(/* can set host and initial state! */);
PowerShell shell = PowerShell.Create();
shell.Runspace = runspace;
shell.AddScript(myScript);
shell.Invoke(/* can set host here, too! */);
을 (필요한 - 유도 된 클래스 메서드 중 하나는 EnterNestedPrompt()
이고 사용자가 실행 한 스크립트로 호출 할 수 있는지 여부를 알 수 없습니다. 가능하면 "시작 새로운 중첩 된 입력 loo p "(as per here) ... 위의 경로에 영향을 주면 잘 알 수 있습니다.
고마워요!
실제로 호스트가 필요하지 않습니다. Write-Host, Read-Host 등의 호출을 피하십시오. PS에 호스트가 연결되어 있는지 확인하는 방법이 있지만 그 순간은 기억하지 못합니다. –
필자는 PSHost를 _need_하지 않을 수도 있지만, 필자의 경우에는 필자가 원한다면 ... 사용자 정의 스크립트가 때때로 보여줄 수 있기를 원하는 가끔씩의 진단 메시지를 갖기를 기대하고있다. (원래 게시물을 편집하여 더 명확하게 만듭니다.) – JaredReisinger