Я пытаюсь запустить локальный экземпляр PowerShell из C# под другими учетными данными пользователя, а затем продолжаю вызывать команды из C#. Возможно ли это?
Если я запускаю PowerShell напрямую (без использования пространств выполнения) следующим образом:
PowerShell ps = PowerShell.Create()
Похоже, что PS не работает вне процесса. Таким образом, он запускается с теми же учетными данными, что и мое приложение C#. Если я пытаюсь запустить этот код под олицетворением, он на самом деле выдает исключение (даже если старые сообщения утверждают, что вы можете это сделать).
Если я пытаюсь создать Runspace вне процесса, например:
RunspaceFactory.CreateOutOfProcessRunspace()
нет способа передать учетные данные, которые я могу найти.
Я знаю, что могу запустить PS под разными учетными данными и выполнить сценарий, отправив команду «Start-Process», но затем Я теряю программирование c интерактивность с C#. Я не вижу результатов вызова сценария.
Кажется, что единственный способ запустить PS из C# под другим пользователем с помощью предписанных методов - это использовать удаленные пространства выполнения, за исключением указания URI в качестве localhost :
PSCredential creds = new PSCredential(UserName, GetSecurePassword(Password));
Uri RemoteComputerUri = Uri ?? new Uri($"{Scheme}://{ComputerName}:{Port}/wsman");
WSManConnectionInfo connectionInfo = new WSManConnectionInfo(RemoteComputerUri, Schema, creds);
using (Runspace remoteRunspace = RunspaceFactory.CreateRunspace(connectionInfo))
{
remoteRunspace.Open();
PowerShell ps = PowerShell.Create();
...
}
Но я не хочу требовать настройки WSMan / HTTP, которая требуется для удаленных пространств выполнения. Я просто хочу запустить PS вне процесса с другими учетными данными, но при этом иметь возможность взаимодействовать с ним через C#.
Заранее спасибо!