9

저는 powershell 스크립트 (활성 디렉토리, 디렉토리 관리 등)를 실행하는 웹 서비스를 작성하고 있습니다.웹 응용 프로그램에서 powershell runspace 호스팅

지금 바로 웹 요청마다 Runspace 인스턴스가 생성됩니다. Runspace 초기화는 시간 소모적 인 작업이기 때문에 ActiveDirectory와 같은 모듈을 가져와야하는 경우가 있습니다. ActiveDirectory는 느린 작업이기도합니다.

이 블로그 게시물 Managing Exchange 2007 Recipients with C#에서 Runspace 인스턴스는 정적 필드에 보관됩니다.

정적 필드에서 Runspace 인스턴스를 유지하면 방아쇠가 안전할까요? 이런 식으로하는 다른 단점이 있습니까?

감사

답변

12

실행 영역은 스레드 안전하지 않으며, 그들은 실행중인 스크립트 중 하나입니다 것을 보장 할 수 있습니다.

RunspacePool을 만들고 웹 서비스 대기열을 사용하는 것이 좋습니다. 이것은 실제로 실제로하기 쉽습니다. v2 ctp3에 대해 블로그를 작성했지만 API가 RTM에 대해 변경되지 않았습니다.

http://www.nivot.org/2009/01/22/CTP3TheRunspaceFactoryAndPowerShellAccelerators.aspx

갱신 :

당신이 하나 개 이상의 모듈과 풀의 각 실행 영역을 미리로드 RunspaceFactory.CreateRunspacePool (InitialSessionState) 오버로드를 사용하려면. 생성하고이를 초기화하는 방법을 확인하려면 다음을 참조하십시오

http://www.nivot.org/2010/05/03/PowerShell20DeveloperEssentials1InitializingARunspaceWithAModule.aspx

당신이 PowerShell을 인스턴스를 만들 때마다, 그 RunspacePool 속성에 풀을 할당합니다.

+0

아하! 그래서 정적 필드 RunspacePool을 생성하고 모든 웹 요청에서 실행되는 모든 Powershell 인스턴스에 전달해야합니다. 풀의 Runspaces에 모듈을 미리로드하는 방법이 있습니까? 어쩌면 내가 할 필요조차 없니? –

+0

업데이트 방법에 대한 자세한 정보가 업데이트되었습니다. – x0n

+0

tnx, x0n. 나는이 답변에 두 개의 upvotes 줄 수 있었으면 좋겠다. –

관련 문제