执行Powershell.Invoke()时的“未经授权的操作”

时间:2018-11-16 18:48:48

标签: c# powershell runspace

我正在运行以下代码,引用自:

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的提及,但是我不清楚我需要在代码中还是在我的用户帐户上进行的更新类型。

0 个答案:

没有答案