«Несанкционированная операция» при выполнении Powershell.Invoke () - PullRequest
0 голосов
/ 16 ноября 2018

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

https://stackoverflow.com/questions/17067260/invoke-powershell-command-from-c-sharp-with-different-credential

Я считаю, что весь необходимый код показан ниже, но в основном, когда вызывается 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, но не совсем ясно о типе обновлений.Мне нужно было бы сделать ... либо в коде, либо в моей учетной записи пользователя.

...