проверить, запущен ли процесс на удаленной машине для определенного пользователя - PullRequest
2 голосов
/ 06 февраля 2012

Мне нужно создать исполняемый файл, который проверяет, запущен ли определенный процесс для определенного пользователя (учетной записи службы) на удаленной машине, входными параметрами являются 3 строки, имя машины, имя пользователя и имя процесса.

У меня есть идея сделать это, используя System.Diagnostics или WMI, я просто хотел дважды проверить, есть ли у кого-нибудь другая идея, такая как powershell или даже функциональность окна, которая может сделать задачу еще проще.

, поскольку мы хотим убедиться, что процесс всегда выполняется на выделенном сервере, мы настроим запланированное задание для запуска небольшого консольного приложения, которое выполняет эту проверку. Не уверен, что кодирование в C # - лучший вариант или я игнорирую встроенную функцию сервера Windows? Спасибо!

Ответы [ 3 ]

1 голос
/ 07 февраля 2012

пространство имен, на которое не ссылается System.Management;

В итоге я реализовал следующее решение в C #

, которое возвращает имя пользователя без имени домена пользователя, выполняющего processName в machineName

public static string GetProcessOwner()
{
    try
    {
        var resultUserName = string.Empty;

        ConnectionOptions opt = new ConnectionOptions();

        string path = string.Format(@"\\{0}\root\cimv2", machineName);

        ManagementScope scope = new ManagementScope(path, opt);

        scope.Connect();

        var query = new ObjectQuery(string.Format("Select * From Win32_Process Where Name = '{0}'", processName));
        ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);

        var processList = searcher.Get();

        foreach (ManagementObject obj in processList)
        {
            string[] argList = new string[] { string.Empty, string.Empty };
            int returnVal = Convert.ToInt32(obj.InvokeMethod("GetOwner", argList));

            if (returnVal == 0)
            {
                // return DOMAIN\user 
                //return argList[1] + "\\" + argList[0];
                resultUserName = argList[0];
            }
        }

        return resultUserName; 
    }
    catch (Exception exc)
    {
        Debug.WriteLine(exc.Message);

        return string.Empty;
    }
}
1 голос
/ 06 февраля 2012

Я уверен, что вы можете сделать это с помощью списка задач cmd: tasklist /S \\<server> /V > tasklist.txt. это даст вам файл, который вы можете просмотреть.

0 голосов
/ 08 октября 2012

GetOwner может вернуть пустой массив для удаленного компа, поэтому он может не работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...