수색…


스톱워치

이 예제는 Stopwatch 를 사용하여 코드 블록을 벤치 마크하는 방법을 보여줍니다.

using System;            
using System.Diagnostics;
        
public class Benchmark : IDisposable
{
    private Stopwatch sw;

    public Benchmark()
    {
        sw = Stopwatch.StartNew();
    }

    public void Dispose()
    {
        sw.Stop();
        Console.WriteLine(sw.Elapsed);
    }
}

public class Program
{
    public static void Main()
    {
        using (var bench = new Benchmark())
        {
            Console.WriteLine("Hello World");
        }
    }
}

셸 명령 실행

string strCmdText = "/C copy /b Image1.jpg + Archive.rar Image2.jpg";
System.Diagnostics.Process.Start("CMD.exe",strCmdText);

이것은 cmd 창을 숨기는 것입니다.

System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = "cmd.exe";
startInfo.Arguments = "/C copy /b Image1.jpg + Archive.rar Image2.jpg";
process.StartInfo = startInfo;
process.Start();

CMD로 명령 보내기 및 출력 받기

이 방법을 사용하면 commandCmd.exe 로 보내고 표준 출력 (표준 오류 포함)을 문자열로 반환 할 수 있습니다.

private static string SendCommand(string command)
{
    var cmdOut = string.Empty;
    
    var startInfo = new ProcessStartInfo("cmd", command)
    {
        WorkingDirectory = @"C:\Windows\System32", // Directory to make the call from
        WindowStyle = ProcessWindowStyle.Hidden,   // Hide the window
        UseShellExecute = false,                   // Do not use the OS shell to start the process
        CreateNoWindow = true,                     // Start the process in a new window 
        RedirectStandardOutput = true,             // This is required to get STDOUT
        RedirectStandardError = true               // This is required to get STDERR
    };

    var p = new Process {StartInfo = startInfo};

    p.Start();

    p.OutputDataReceived += (x, y) => cmdOut += y.Data;
    p.ErrorDataReceived += (x, y) => cmdOut += y.Data;
    p.BeginOutputReadLine();
    p.BeginErrorReadLine();
    p.WaitForExit();
    return cmdOut;
}

용법

var servername = "SVR-01.domain.co.za";
var currentUsers = SendCommand($"/C QUERY USER /SERVER:{servername}")

산출

문자열 currentUsers = "사용자 이름 세션 이름 ID 상태 IDLE 시간 로그온 시간 Joe.Bloggs ica-cgp # 0 2 활성 24692 + 13 : 29 25/07/2016 07:50 Jim.McFlannegan ica-cgp # 1 3 활성. 2016 08:33 Andy.McAnderson ica-cgp # 2 4 활성. 25/07/2016 08:54 John.Smith ica-cgp # 4 5 활성 14 25/07/2016 08:57 Bob.Bobbington ica-cgp # 5 6 Active 24692 + 13 : 29 25/07/2016 09:05 Tim.Tom ica-cgp # 6 7 활성. 25/07/2016 09:08 Bob.Joges ica-cgp # 7 8 활성 24692 + 13 : 29 25 / 07 / 2016 09:13 "


어떤 경우에는 해당 서버에 대한 액세스가 특정 사용자로 제한 될 수 있습니다. 이 사용자에 대한 로그인 자격 증명이 있으면이 방법으로 쿼리를 보낼 수 있습니다.

private static string SendCommand(string command)
{
    var cmdOut = string.Empty;
    
    var startInfo = new ProcessStartInfo("cmd", command)
    {
        WorkingDirectory = @"C:\Windows\System32",
        WindowStyle = ProcessWindowStyle.Hidden,    // This does not actually work in conjunction with "runas" - the console window will still appear!
        UseShellExecute = false,
        CreateNoWindow = true,
        RedirectStandardOutput = true, 
        RedirectStandardError = true,

        Verb = "runas",
        Domain = "doman1.co.za",
        UserName = "administrator",
        Password = GetPassword()
    };

    var p = new Process {StartInfo = startInfo};

    p.Start();

    p.OutputDataReceived += (x, y) => cmdOut += y.Data;
    p.ErrorDataReceived += (x, y) => cmdOut += y.Data;
    p.BeginOutputReadLine();
    p.BeginErrorReadLine();
    p.WaitForExit();
    return cmdOut;
}

비밀번호 얻기 :

static SecureString GetPassword()
{
    var plainText = "password123";
    var ss = new SecureString();
    foreach (char c in plainText)
    {
        ss.AppendChar(c);
    }

    return ss;
}

노트

위의 두 방법 모두 OutputDataReceivedErrorDataReceived 가 모두 같은 변수 ( cmdOut 추가되므로 STDOUT과 STDERR의 연결을 반환합니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow