2012-11-13 9 views
3

질문을 게시하는 것은 처음입니다. 나는 둘 다 csharp와 powershell에 익숙하다. 제 영어가 능숙하지 못하다면 제발 저를 참아주십시오. 나는 내 csharp 코드를 powershell로 변환하려했지만 성공하지 못했습니다. PowerShell에 관한 문서를 조사해 보았고 불행하게도 그 중 하나를 시도해 보았습니다. 내 csharp 코드는 Visual Studio 2010에서 작동하지만 Powershell에 포함시키고 사용할 수는 없습니다. 아래의 코드는 taskmanager의 PID를 간단히 포착하여 메모장에 시간과 날짜 스탬프로 기록합니다. 도움이 될 것입니다.Powershell v1에 C# 코드를 포함하려고 시도했습니다.

내 CSHARP 코드는 다음과 같습니다 내 파워 쉘 코드에서

using System; 
using System.Collections.Generic; 
using System.Diagnostics; 
using System.Text; 
using System.Windows.Forms; 
using System.IO; 

namespace GET_TASK 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 

      var processList = Process.GetProcessesByName("taskmgr");     

      foreach (var process in processList) 
      { 

       string myPath = "C:/powershell/GET_TASK"; //change data path as needed 

       FileStream logfile; 
       //log program process 
       logfile = new FileStream(myPath + "/logfile.txt", FileMode.Append, FileAccess.Write); 

       TextWriter oldLog = Console.Out; 

       StreamWriter writelog; 
       writelog = new StreamWriter(logfile);    

       DateTime time = DateTime.Now; 
       string format = "MMM ddd d HH:mm yyyy"; 

       Console.SetOut(writelog); 

       // print out the process id 
       Console.WriteLine("Process Id=" + process.Id + " - " + time.ToString(format)); 

       Console.SetOut(oldLog);       

       writelog.Close(); 

       System.Environment.Exit(0);        
      } 
     } 
    } 
} 

, 난 그냥 말에이 코드의 구걸과

Add-Type -TypeDefinition $source 
[GET_TASK.Program]::Main() 

에서

$source = @" 

를 넣어 코드는 작동하지만 작동하지 않습니다. PowerShell 버전 1을 사용하고 있습니다. 제 C# 코드를 변환하는 데 도움이됩니다.

+0

당신이 오류를 얻고있다 (당신이 DLL을 만들고 [Reflection.Assembly]::LoadFile("c:\myddl.dll") 사용해야하는 V1을 위해, 단지 파워 쉘의 V2 또는 V3) 추가 형의 사용에 대한 귀하의 코드? PowerShell을 실행하면 어떻게됩니까? "작동하지 않는다"이상으로 우리에게 아무 것도 말하지 않으면 우리는 당신을 도울 수 없습니다. 또한 여기에서 수행되는 활동 (프로세스 ID 가져 오기 및 파일 작성)은 내장 cmdlet을 사용하여 PowerShell에서 직접 수행하는 것이 가장 쉽습니다. –

+1

PowerShell V2에'Add-Type'이 추가 되었으나 존재하지 않습니다 (따라서 PSH V1에서는 실패합니다). PSH V1이 이제 꽤 오래 되었기 때문에 (그리고 V2의 향상된 PSH가 대량으로) V2로 커밋하는 것으로 생각하십니까? – Richard

답변

2

이 시도 :

get-process | % { "Process ID = $($_.id) - $(get-date -Format "MMM ddd d HH:mm yyyy")" } | 
out-file -path "C:/powershell/GET_TASK" -append 

IT는 파워 쉘 해당하는 코드입니다.

$t = @" 
using System; 
using System.Diagnostics; 
using System.IO; 

public class Program 
    { 
     public static void Main() 
     {  
      var processList = Process.GetProcessesByName("taskmgr");  
      foreach (var process in processList) 
      {  
       string myPath = "C:/"; //change data path as needed  
       FileStream logfile; 
       //log program process 
       logfile = new FileStream(myPath + "/logfile.txt", FileMode.Append, FileAccess.Write);  
       TextWriter oldLog = Console.Out;  
       StreamWriter writelog; 
       writelog = new StreamWriter(logfile); 
        DateTime time = DateTime.Now; 
       string format = "MMM ddd d HH:mm yyyy";  
       Console.SetOut(writelog); 
        // print out the process id 
       Console.WriteLine("Process Id=" + process.Id + " - " + time.ToString(format));  
       Console.SetOut(oldLog);  
       writelog.Close();  
       //System.Environment.Exit(0); removed, otherwise closes the console 
      } 
     } 
    } 
"@ 

Add-Type -TypeDefinition $t 
[program]::main() 
+0

응답 해 주셔서 감사합니다. 사실 powershell에서 작동하지만, 지금은 C# 코드를 powershell에 임베드하여 동일하게 작동시키는 방법을 찾으려고합니다. 간단한 C# 계산을 내장 할 수는 있지만, IO와 FORMS를 사용하는 PowerShell에 C#을 삽입하는 방법을 알지 못합니다. 건배! –

+0

@AllanTolentino C# 코드 (다소 수정 됨) –

+0

을 임베드하기위한 코드를 추가했습니다.이 오류가 발생합니다. >> 형식 또는 네임 스페이스 이름 'var'을 (를) 찾을 수 없습니다. 어셈블리 참조?). –

관련 문제