MVC 3 컨트롤러에서 가장을 사용하여 Powershell cmdlet을 실행하려고하지만 "요청 된 레지스트리 액세스를 계속 허용하지 않습니다." 예외는() Runspace.Open를 호출 할 때Runspace 가장이있는 MVC 컨트롤러
StringBuilder stringBuilder = new StringBuilder();
RunspaceConfiguration rsConfig = RunspaceConfiguration.Create();
using (new Impersonator("username", "domain", "password"))
{
Runspace runspace = RunspaceFactory.CreateRunspace(rsConfig);
runspace.Open();
Pipeline pipeLine = runspace.CreatePipeline();
string script = "get-process";
pipeLine.Commands.AddScript(script);
Collection<PSObject> commandResults = pipeLine.Invoke();
foreach (PSObject obj in commandResults)
{
stringBuilder.AppendLine(obj.Properties["ProcessName"].Value.ToString());
}
디버깅 레지스트리 오류로 인해 레지스트리 키 읽기가 HKCU \ 환경에서 시도되기 보여줍니다. 가장을 사용하지 않고 위에서 실행하면 성공적으로 작동합니다.
참고 : 명의 도용 클래스는 여기에서 발견되었다 : 이런 일이 나 그것을 해결하기 위해 무엇을 할 수있는 이유에 http://platinumdogs.wordpress.com/2008/10/30/net-c-impersonation-with-network-credentials/
어떤 아이디어?
UPDATE :
내가 가장 선 위의 Runspace.Open()를 이동하면 실행 영역이 필요한 레지스트리 데이터 (환경 변수)에 액세스 할 수 있도록이 실제로 도움 것이라고 추론 잠을 받고 후.
이제 코드가 기본 제공 cmdlet과 함께 제대로 작동하지만 "Microsoft.Exchange.Management.PowerShell.Admin"을로드하고 Exchange Cmdlet을로드하면 응용 프로그램이 중단됩니다.
스크립트를 라이브러리로 다시 쓸 수없는 이유가 있습니까? 결국 더 쉽고 유지 보수가 쉬울 수 있습니다. – jrummell
아이디어는 다른 명령이 사용된다는 것입니다. 위의 내용은 제가 수행하는 작업의 단순화 된 버전입니다. – ServerMonkey
@ ServerMonkey - "응용 프로그램이 고장 나고 있습니다"라고 할 때 어떤 오류 메시지가 나타 납니까? 같은거야? – MrKWatkins