5

質問を投稿するのは初めてです。私はcsharpとpowershellの両方が初めてです。私の英語がまったく上手でない場合は、ご容赦ください。csharp コードを powershell に変換しようとしましたが、うまくいきません。powershell に関するドキュメントを調べて、それぞれを試してみましたが、残念ながら何もうまくいきませんでした。私の csharp コードは Visual Studio 2010 で動作していますが、Powershell に埋め込んで動作させることができませんでした。以下のコードは、単純にタスク マネージャーの PID をキャッチし、それを時刻と日付のスタンプと共にメモ帳に書き込みます。どんな助けでも大歓迎です。

私の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# コードの変換を手伝ってください。

4

1 に答える 1

3

これを試して:

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

これは、powershell と同等のコードです。

add-type で使用するコード (powershell V2 または V3 のみ。V1 の場合は DLL を作成して使用する必要があります[Reflection.Assembly]::LoadFile("c:\myddl.dll"))

$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()
于 2012-11-13T05:10:11.170 に答える