«Неавторизованная операция» при выполнении Powershell.Invoke()

Я запускаю приведенный ниже код, как указано в:

https://i.stack.imgur.com/fltkm.png

Я считаю, что весь необходимый код показан ниже, но в основном, когда вызывается GetPSResults, передается объект PSCredential. Проблема возникает, когда я пытаюсь выполнить ps.Invoke().

Я запускаю это на локальном хосте, запуская сценарий Powershell как «общий» пользователь, который был создан для использования в этой программе (эти учетные данные установлены в объекте PSCredential). Этому пользователю также были предоставлены права администратора на моем локальном хосте. Этот пользователь пытается получить журналы с удаленного сервера. Учитывая ошибку, я предполагаю, что это какая-то проблема с разрешениями, но я не очень хорошо знаком с этой стороной вещей.

protected override void OnStart(string[] args)
    {
        GetLogs newGetLogs = new GetLogs();
        PSCredential credential = new PSCredential(@"MYDOMAIN\MYUSERID", newGetLogs.GetSecurePassword("TESTPASSWORD"));

        Collection<PSObject> returnValues = GetPSResults(credential);

    }            
        public static Collection<PSObject> GetPSResults(PSCredential credential, bool throwErrors = true)
        {
            Collection<PSObject> toReturn = new Collection<PSObject>();
            WSManConnectionInfo connectionInfo = new WSManConnectionInfo();
            connectionInfo.Credential = credential;

            using (Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo))
            {
                runspace.Open();
                using (PowerShell ps = PowerShell.Create())
                {
                    ps.Runspace = runspace;
                    ps.AddCommand("get-eventlog");
                    ps.AddParameter("ComputerName", "MYSERVERNAME");
                    ps.AddParameter("LogName", "MYLOGNAME");
                    ps.AddParameter("EntryType", "Error");
                    ps.AddParameter("Newest", 20);

                    toReturn = ps.Invoke();
                    if (throwErrors)
                    {
                        if (ps.HadErrors)
                        {
                            throw ps.Streams.Error.ElementAt(0).Exception;
                        }
                    }
                }
                runspace.Close();
            }

            return toReturn;
        }

        public SecureString GetSecurePassword(string password)
        {
            var securePassword = new SecureString();
            foreach (var c in password)
            {
                securePassword.AppendChar(c);
            }

            return securePassword;
        }

Я получаю эту ошибку:

System.Management.Automation.RemoteException: «Попытка выполнить несанкционированную операцию».

В Visual Studio я могу углубиться в ошибку, чтобы увидеть изображение ниже. Я вижу, что в этих сообщениях есть несколько упоминаний реестра ... это признак какой-то проблемы с разрешениями?

Я видел некоторые упоминания о WinRM, но я не совсем понимаю, какие обновления мне нужно будет сделать... либо в коде, либо в моих учетных записях пользователей.


person tbcodes33    schedule 16.11.2018    source источник
comment
Есть ли причина, по которой вы вызываете PowerShell из C# вместо использования методов .NET для чтения журнала событий Windows? (например, EventLog.GetEventLogs   -  person Gabriel Luci    schedule 16.11.2018
comment
Я предполагаю, что это в службе Windows. Под какими учетными данными работает служба?   -  person Gabriel Luci    schedule 16.11.2018
comment
@GabrielLuci, отличный вопрос. Планируется, что это конкретное приложение будет выполнять несколько более сложных операций, что будет проще с Powershell. Что касается вашего другого вопроса... Да, это служба Windows. Если я правильно вас понял, служба работает под учетными данными localhost.   -  person tbcodes33    schedule 16.11.2018
comment
Вы имеете в виду, что это локальная учетная запись пользователя? Если вы запустите services.msc и посмотрите на список служб, вы увидите столбец «Войти как». Что есть на эту услугу?   -  person Gabriel Luci    schedule 16.11.2018
comment
И мне было бы любопытно узнать, какие более сложные операции проще выполнять с помощью PowerShell, чем с помощью .NET. Раньше я писал код PowerShell на C#, когда у меня не было другого выбора (например, с администрированием Microsoft Exchange и Office 365), но это ужасно. Я научился избегать этого любой ценой.   -  person Gabriel Luci    schedule 16.11.2018