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