2014-06-19 6 views
0

C#에서 Powershell 내에서 SQL 쿼리를 실행하려고합니다. 필자는 ActiveDirectory cmdlet을 사용하여 성공적인 결과를 얻었으며 한 걸음 더 나아가고 싶었습니다. 다음과 같은 형식은 C#으로 실패 액티브 디렉토리와 (과 ISE에서) 작동하는 동안Powershell SQLPS 모듈이 C# 내에서 가져 오지 못함

나의 첫번째 문제는 : 나는 한참 무제한으로 설정 보안을 했어

using (PowerShell pS = PowerShell.Create()) 
    { 
     pS.AddCommand("import-module"); 
     pS.AddArgument("sqlps"); 
     pS.Invoke(); 
    } 

하지만, 오류가 난 점점 m은 다음과 같습니다

CmdletInvocationException이

파일 C 처리되지 않은했다 : \의 Program Files (x86) \ Microsoft SQL Server를 \ 110 개 \ 도구 \ PowerShell을 \ 모듈 \의 이 시스템에서는 스크립트 실행이 비활성화되어 qlps \ Sqlps.ps1을로드 할 수 없습니다. 자세한 내용은 about_Execution_Policies (http://go.microsoft.com/fwlink/?LinkID=135170)를 참조하십시오.

using (PowerShell pS = PowerShell.Create()) 
    { 
     pS.AddScript("Import-Module sqlps"); 
     pS.Invoke(); 
    } 

것은 내가 다음 ActiveDirectory에 가져 오기를 시도하는 경우 :이처럼 실행하면 나중에는 "GET-모듈 -all은"전화 모듈의 흔적을 보여줍니다하지만

그러나, 나는 오류를 얻을 모듈을 호출하고 Get-Module을 호출하면 아무 것도 표시되지 않습니다.

여기 무슨 일 이니?

답변

0

나는 C 날카로운와 위대한 모르겠지만 PowerShell을 외부에서 스크립트를 호출 할 때, 즉 원격 스크립트를 호출 할

powershell.exe -executionpolicy bypass -command "& '\\somepath\somescript.ps1' " 

이 수, 실행 정책을 우회하는 프로그램을 실행하면 플래그가 , 무제한으로 설정 한 경우에도 일부 스크립트 실행을 묻는 메시지가 나타나기 때문에 작업 스케줄러에서 실행하지 못할 수도 있습니다.

또한 SQLPS를 가져올 때 -DisableNameChecking 플래그를 추가하는 것이 유용하다는 것을 알았 으면 미리 위치를 누르고 팝업 한 다음에 그렇지 않으면 SQLPS PSdrive에서 로컬 위치에 액세스 할 수 없게됩니다 필요한 경우.

+0

저는 작업 스케줄러와 관련된 문제에 결코 뛰어 들어 본 적이 없습니다. 문제없이 야간에 실행할 스크립트가 많습니다. 그러나 C#에서 실행하기위한 비슷한 솔루션이 있는지 살펴볼 것입니다. SQLPS 가져 오기에 관해서는 필자는 해당 매개 변수를 사용하고 결과에서 차이가 없도록 ('import-module sqlps -cmdlet invoke-sqlcmd') 끌어 오기위한 cmdlet을 지정했습니다. – squid808

0

너는 이와 비슷한 것을 시도 했습니까?

 PowerShell ps = PowerShell.Create(); 
     ps.AddScript("set-executionpolicy unrestricted -scope process"); 
     ps.AddScript("import-module sqlps"); 
     ps.AddScript("get-module sqlps"); 

     var m = ps.Invoke(); 
     foreach (var mm in m.Select(x => x.BaseObject as PSModuleInfo)) 
      Console.WriteLine(new { mm.Name, mm.Version }); 
+0

이 코드는 질문에 답할 수 있지만 _context_를 설명하고 _how_ 작동하며 _when_를 사용하는 것이 더 낫습니다. 코드 전용 답변은 장기적으로 유용하지 않습니다. –