我正在使用dotnet框架(4.5)的RunSpace和Pipeline类从我的C#应用程序调用powershell。
runspace = RunspaceFactory.CreateRunspace();
runspace.ThreadOptions = PSThreadOptions.UseCurrentThread;
runspace.Open();
Log("Create runspace pipeline");
pipeline = runspace.CreatePipeline();
pipeline.Commands.AddScript(_scriptText);
Log("Invoke scripting");
try
{
results = pipeline.Invoke();
}
catch (Exception e)
{
//Exception handling code
}
Log("Script complete");
// results processing code
字符串
我将执行此代码片段的线程模拟为特定用户。用户详细信息将在运行时提供,我模拟为该用户并运行此代码。模拟工作正常--我已经确认了这一点,使用Name()方法作为Thread所有者的标识,还在上面的代码片段中创建了一个文件并检查了它的所有者。但是,如果我对正在RunSpace/Pipeline中执行的PowerShell脚本执行“whoami”,则打印的用户不是调用上述代码的线程的所有者,而是拥有应用程序进程的系统管理员帐户。
无论我做什么,我都无法让PowerShell以模拟用户的身份运行。感觉就像运行空间忽略了我在C#中所做的用户模拟。如何调用运行空间以作为我想模拟的用户运行powershell?
1条答案
按热度按时间zqry0prt1#
对不起张贴这作为一个答案马上,因为我不能评论,因为我还没有50级代表。无论如何,你可以从KelvinTegelaar已经做的这个模块中复制c#:https://github.com/KelvinTegelaar/RunAsUser
我用它,它工作得很好。它是一个PowerShell模块,但它最C#无论如何。在PowerShell中,你可以像这样使用它:
invoke-ascurrentuser -scriptblock $scriptblock -UseWindowsPowerShell
C#进行模拟并运行您给它的PowerShell脚本块(作为用户模拟),所以听起来像是您所需要的?