这是我第一次发帖提问。我是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#代码。
答案 0 :(得分:2)
试试这个:
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()