.net 使用RunSpace类时的C#用户模拟

rbl8hiat  于 2023-08-08  发布在  .NET
关注(0)|答案(1)|浏览(95)

我正在使用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?

zqry0prt

zqry0prt1#

对不起张贴这作为一个答案马上,因为我不能评论,因为我还没有50级代表。无论如何,你可以从KelvinTegelaar已经做的这个模块中复制c#:https://github.com/KelvinTegelaar/RunAsUser
我用它,它工作得很好。它是一个PowerShell模块,但它最C#无论如何。在PowerShell中,你可以像这样使用它:
invoke-ascurrentuser -scriptblock $scriptblock -UseWindowsPowerShell
C#进行模拟并运行您给它的PowerShell脚本块(作为用户模拟),所以听起来像是您所需要的?

相关问题