2012-11-13 30 views
3

這是我第一次發佈問題。我對csharp和powershell都是新手。如果我的英語不好,請耐心等待。 我一直在嘗試將我的csharp代碼轉換爲PowerShell,但我不成功。我試圖研究有關PowerShell的文檔,並嘗試其中每一個,不幸的是,沒有爲我工作。我的csharp代碼在Visual Studio 2010中工作,但我無法在PowerShell中嵌入和工作。 下面的代碼只是捕獲任務管理器的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);        
      } 
     } 
    } 
} 

在我的PowerShell代碼,我只是把

$source = @" 

這段代碼的乞討和

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

在的結束代碼,但它不起作用。我正在使用Powershell版本1.請幫助轉換我的C#代碼。

+0

您是否收到任何錯誤代碼?當你運行PowerShell時會發生什麼?如果您不告訴我們任何超過「不起作用」的事情,我們都無法幫助您。此外,在這裏執行的活動(獲取進程id和寫入文件)在使用內置cmdlet的powershell中直接執行起來肯定更容易。 –

+1

'添加類型'在PowerShell V2中添加,它不存在(所以在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 

這是PowerShell的等價代碼。

您的使用添加型(只的PowerShell V2或V3,你必須創建一個DLL和使用[Reflection.Assembly]::LoadFile("c:\myddl.dll") V1)

$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中工作,但在這一點上,我試圖找出如何在PowerShell中嵌入工作的C#代碼,並使其工作相同。我可以嵌入一個簡單的C#計算,但是我不知道如何在使用IO和FORMS這樣的PowerShell中嵌入C#。乾杯! –

+0

@AllanTolentino我已經添加了嵌入C#代碼(稍微修改)的代碼 –

+0

現在,我得到這個錯誤>>無法找到類型或名稱空間名稱'var'(你是否缺少using指令或組裝參考?)。 –