尝试使用模拟在远程计算机上运行 PowerShell 脚本时出现“不允许请求的注册表访问”

2023-11-21

这是我第一次尝试从 C# 应用程序执行 PowerShell 脚本。我使用 PowerShell 是因为我需要在远程计算机上执行的 .exe 的输出。我能够使用 WMI 在远程计算机上运行 .exe,但无法获得所需的输出。

无论如何,过去一天左右我一直在研究这个问题,我在网上和这里查找类似的问题,但似乎无法找出问题所在。我正在尝试从远程计算机上的 .NET 4.0 应用程序运行简单的 PowerShell 命令。当我以管理员身份运行 Visual Studio 2013 时,以下代码执行正常:

PowerShell ps = PowerShell.Create();
ps.AddScript(@"Invoke-Command {c:\path\to\file.exe /p} -computername <computerName>");
results = ps.Invoke();

我得到了预期的结果。然而,当我以非管理员身份运行 VS 时,代码似乎执行得很好(没有例外),但我没有得到任何结果。环顾四周后,我添加了模拟,如下所示:

using (var impersonator = new Impersonator("username", "domain", "password"))
{
    PowerShell ps = PowerShell.Create();
    ps.AddScript(@"Invoke-Command {c:\path\to\file.exe /p} -computername <computerName>");
    results = ps.Invoke();
}

但是,ps.Invoke 方法开始抛出 System.Security.SecurityException -“不允许请求的注册表访问”。这是堆栈跟踪:

在 Microsoft.Win32.RegistryKey.OpenSubKey(字符串名称,布尔可写) 在 System.Environment.GetEnvironmentVariable(字符串变量,EnvironmentVariableTarget 目标) 在 System.Management.Automation.ModuleIntrinsics.GetExpandedEnvironmentVariable(字符串名称,EnvironmentVariableTarget 目标) 在 System.Management.Automation.ModuleIntrinsics.SetModulePath() 在 System.Management.Automation.ModuleIntrinsics..ctor(ExecutionContext 上下文) 在 System.Management.Automation.ExecutionContext.InitializeCommon(AutomationEngine 引擎,PSHost 主机接口) 在 System.Management.Automation.ExecutionContext..ctor(AutomationEngine 引擎、PSHost 主机接口、RunspaceConfiguration runspaceConfiguration) 在 System.Management.Automation.AutomationEngine..ctor(PSHost hostInterface、RunspaceConfiguration runspaceConfiguration、InitialSessionState iss) 在 System.Management.Automation.Runspaces.LocalRunspace.DoOpenHelper() 在System.Management.Automation.Runspaces.LocalRunspace.OpenHelper(布尔syncCall) 在System.Management.Automation.Runspaces.RunspaceBase.CoreOpen(布尔syncCall) 在 System.Management.Automation.Runspaces.RunspaceBase.Open() 在 System.Management.Automation.PowerShell.Worker.CreateRunspaceIfNeededAndDoWork(运行空间 rsToUse,布尔值 isSync) 在 System.Management.Automation.PowerShell.CoreInvokeHelper[TInput,TOutput](PSDataCollection1 input, PSDataCollection1个输出,PSInitationSettings设置) 在 System.Management.Automation.PowerShell.CoreInvoke[TInput,TOutput](PSDataCollection1 input, PSDataCollection1个输出,PSInitationSettings设置) 在 System.Management.Automation.PowerShell.CoreInvoke[TOutput](IEnumerable 输入,PSDataCollection`1 输出,PSInitationSettings 设置) 在 System.Management.Automation.PowerShell.Invoke(IEnumerable 输入,PSInitationSettings 设置) 在 System.Management.Automation.PowerShell.Invoke()

我不确定为什么当我运行的管理员帐户有权访问注册表时,我会收到 SecurityException,不仅在我的计算机上,而且在整个企业的计算机上。我什至不确定哪个注册表出现异常,是我的机器还是远程机器。


在模拟之前为 PowerShell 对象创建底层 RunSpace:

PowerShell ps = PowerShell.Create();
Runspace runspace = RunspaceFactory.CreateRunspace();
runspace.Open();
powerShell.Runspace = runspace;

using (var impersonator = new Impersonator("username", "domain", "password"))
{
    ps.AddScript(@"Invoke-Command {c:\path\to\file.exe /p} -computername <computerName>");
    results = ps.Invoke();
}
runspace.Close()

RunSpace对象封装了脚本执行的操作系统环境。正在访问的密钥可能是 HKCU\Environment。这是我使用时看到的Perfmon。 RunSpace 可能使用 HKCU\Environment 来填充 $PATH 等变量。

因此,当创建 RunSpace 时,您希望当前用户能够访问 HKCU\Environment。

拉动模拟块的 RunSpace.Open 在别处提到为避免注册表访问问题的技巧。但是,仅创建 PowerShell 对象并不能保证调用 Runspace.Open()。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尝试使用模拟在远程计算机上运行 PowerShell 脚本时出现“不允许请求的注册表访问” 的相关文章

  • 创建 DirectoryEntry 实例以供测试使用

    我正在尝试创建 DirectoryEntry 的实例 以便可以使用它来测试将传递 DirectoryEntry 的一些代码 然而 尽管进行了很多尝试 我还是找不到实例化 DE 并初始化它的 PropertyCollection 的方法 我有
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • 为什么禁止在 constexpr 函数中使用 goto?

    C 14 对你能做什么和不能做什么有规则constexpr功能 其中一些 没有asm 没有静态变量 看起来相当合理 但标准也不允许goto in constexpr功能 即使它允许其他控制流机制 这种区别背后的原因是什么 我以为我们已经过去
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • 具有相关动态参数的 PowerShell 函数

    我试图定义一个函数 其中动态参数相互依赖 例如 我可能有 1 个参数和两个动态参数 rootPath 驱动器盘符 rootPathItem 第一个文件夹 在驱动器盘符内 rootPathChildItem 第二个文件夹 第一个之内 问题是
  • 基于范围的 for 循环中的未命名循环变量?

    有没有什么方法可以不在基于范围的 for 循环中 使用 循环变量 同时也避免编译器发出有关未使用它的警告 对于上下文 我正在尝试执行以下操作 我启用了 将警告视为错误 并且我不想进行像通过在某处毫无意义地提及变量来强制 使用 变量这样的黑客
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • 为什么模板不能位于外部“C”块内?

    这是一个后续问题一个答案 https stackoverflow com questions 4866433 is it possible to typedef a pointer to extern c function type wit
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 更改窗口的内容 (WPF)

    我创建了一个简单的 WPF 应用程序 它有两个 Windows 用户在第一个窗口中填写一些信息 然后单击 确定 这会将他们带到第二个窗口 这工作正常 但我试图将两个窗口合并到一个窗口中 这样只是内容发生了变化 我设法找到了这个更改窗口内容时
  • 如何使用 PowerShell 2 的导出 csv 附加文件?

    filesremoved export csv Path E Code powershell logs filesremoved txt NoTypeInformation 我也尝试过 filesremoved export csv Pat
  • 用 C 实现 Unix shell:检查文件是否可执行

    我正在努力用 C 语言实现 Unix shell 目前正在处理相对路径的问题 特别是在输入命令时 现在 我每次都必须输入可执行文件的完整路径 而我宁愿简单地输入 ls 或 cat 我已经设法获取 PATH 环境变量 我的想法是在 字符处拆分
  • C 中的位移位

    如果与有符号整数对应的位模式右移 则 1 vacant bit will be filled by the sign bit 2 vacant bit will be filled by 0 3 The outcome is impleme
  • 使用 powershell 编辑 XML

    好吧 我感觉自己像个大白痴 为了工作中的管理目的 我使用 Powershell 已经有一段时间了 也就是说 编写脚本不是我的强项 现在 我正在尝试编写一个 PS 脚本 将一个部分添加到一堆机器上的 XML 中 以添加设置来解决我们在某个应用
  • GDK3/GTK3窗口更新的精确定时

    我有一个使用 GTK 用 C 语言编写的应用程序 尽管该语言对于这个问题可能并不重要 这个应用程序有全屏gtk window与单个gtk drawing area 对于绘图区域 我已经通过注册了一个刻度回调gtk widget add ti
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • 方法参数内的变量赋值

    我刚刚发现 通过发现错误 你可以这样做 string s 3 int i int TryParse s hello out i returns false 使用赋值的返回值是否合法 Obviously i is but is this th
  • 在 ASP.NET 中将事件冒泡为父级

    我已经说过 ASP NET 中的层次结构 page user control 1 user control 2 control 3 我想要做的是 当控件 3 它可以是任何类型的控件 我一般都想这样做 让用户用它做一些触发回发的事情时 它会向
  • 将变量分配给另一个变量,并将一个变量的更改反映到另一个变量中

    是否可以将一个变量分配给另一个变量 并且当您更改第二个变量时 更改会瀑布式下降到第一个变量 像这样 int a 0 int b a b 1 现在 b 和 a 都 1 我问这个问题的原因是因为我有 4 个要跟踪的对象 并且我使用名为 curr

随机推荐

  • 如何使用 JPA Criteria API 解析 Oracle 的“rownum”伪列?

    我想使用 JPA Criteria 从数据库获取第一行 我使用JPA Hibernate 4 2 7 在 SQL 中 语句如下所示 SELECT FROM houses WHERE rownum 1 我的 Java 代码实现如下所示 Cri
  • Fabric js 使用自定义属性扩展 toObject,丢失了默认属性

    在发布这篇文章之前 我一直在这里和其他许多地方一样进行查找 但我可以让它充分发挥作用 我所需要的只是能够在所有形状中保存一些自定义属性 属性是 uuid 和 rt attributes 因此 按照手动方式 我添加了以下代码 fabric O
  • 如何在cygwin上通过控制台安装以前版本的软件包?

    我需要编写一个使用 svn 1 6 17 部署许多 cygwin 应用程序的脚本 我所有的尝试都是通过安装 svn 1 7 或什么都不完成 我尝试安装 subversion subversion 1 6 subversion 1 6 17
  • 连接 xml 文件

    我有几个 xml 文件 其名称存储在另一个 xml 文件中 我想使用 xsl 生成 xml 文件组合的摘要 我记得有一种方法可以使用 msxml 扩展来执行此操作 我正在使用 msxml 我知道我可以使用获取每个文件的内容select do
  • 如何使用 JavaScript 检测 Chrome v78+ 上的 #enable-force-dark 标志?

    我最近为我的网站设计并实现了一种深色模式 该模式使用自定义深色来匹配浅色 默认 配色方案 而且我最近还意识到 Chrome 78 有一个可选标志 称为 enable force dark 启用后 用户必须这样做 Chrome 会自动尝试将网
  • 验证用 javascript 逗号分隔的多个电子邮件

    我想验证一个字符串 它可以是一封电子邮件或多封以逗号分隔的电子邮件 例如 电子邮件受保护 gt 正确账单 gt 假 电子邮件受保护 电子邮件受保护 gt 正确 电子邮件受保护 电子邮件受保护 鲍勃 gt 假 bob 电子邮件受保护 电子邮件
  • 如何在静态上下文中将泛型类与特定对象一起使用?

    我会尽力解释 我使用 Play Framework 2 我会做很多 CRUD 操作 其中一些是相同的 所以我想 KISS 和 DRY 所以一开始我正在考虑一个包含以下内容的抽象类list details create update and
  • 动态将 Expression> 转换为 Expression

    我找不到从 Expression gt 转换为 Expression gt 的方法 由于我使用了大量反射 实际上 我真正需要的是一种采用类型参数并执行转换的方法 public object Convert Expression
  • 检查pandas数据框中是否有多个子字符串[重复]

    这个问题在这里已经有答案了 我有一个 pandas 数据框 我想检查特定列的子字符串 目前我有 30 行这样的代码 df NAME str upper str contains LIMITED df NAME str upper str c
  • python打开不同目录下的所有文件

    我需要在当前目录中打开另一个目录中的文件而不使用它的路径 当我执行以下代码时 for file in os listdir sub dir f open file r lines f readlines for line in lines
  • C++ const Convert [重复]

    这个问题在这里已经有答案了 可能的重复 为什么将 指向非常量指针的指针 转换为 指向指向常量指针的指针 是不合法的 我有一个功能 bool isCirclePolygonIntersection const Point const int
  • 无需编写控制器的简单 ASP.NET MVC 视图

    我们正在构建一个具有非常少代码的网站 它主要只是提供一堆静态页面 我知道随着时间的推移 情况会发生变化 我们需要交换更多动态信息 因此我决定继续使用 ASP NET MVC2 和 Spark 视图引擎构建一个 Web 应用程序 将有几个控制
  • C#:明确声明“不安全”/编译器选项的好处

    我了解指针以及在 C 代码中使用它们的罕见需求 我的问题是 必须在代码块中明确声明 不安全 背后的原因是什么 此外 为什么必须更改编译器选项以允许 不安全 代码 底线 CLR 或语言规范 中的什么使得我们不能在需要时就使用指针 就像 C 和
  • “您可能需要一个合适的加载器来处理此文件类型”webpack 和 vue

    我正在尝试使用以下命令编译 webpack node modules bin webpack 我收到错误 Module parse failed home vagrant Code stream resources assets js vi
  • jQuery 动画:忽略双击

    我有一个简单的 jQuery 动画 可以在 click 事件发生时将 div 向右或向左移动 但是 如果用户单击该事件两次 则会触发两次 这会扰乱格式 这是我所拥有的示例 a right click function if this is
  • 限制wget可以下载的大小

    是否可以限制或限制数据量wget从网站下载 通过服务器设置或wget环境 例如 一页大小为 1GB 我希望 wget 在 100MB 时停止下载 利用系统通过以下方式限制进程资源消耗的能力ulimit命令应该可以正常工作 假设您使用 bas
  • 在 Mako 中将字符串标记为安全

    我正在使用带有 Mako 模板的 Pylons 并且我想避免一直输入以下内容 h some function that outputs html n 我想以某种方式将函数或变量标记为安全 您可以在 Django 中执行此操作 这样我就不必一
  • 错误:未知选项“--no-crunch”- AAPT 错误

    我昨天下载了最新版本 r14 但在运行任何应用程序时出现此错误 ERROR Unknown option no crunch 请帮忙 我最近遇到了这个问题 但现在是solved 更新到 ADT r14 后 转到Window gt SDK M
  • YouTube 链接的正则表达式

    在我正在开发的系统中 我需要识别以下格式的 YouTube 链接 youtube youtube 网址 youtube 目前我得到了这个正则表达式 youtube http www youtube watch v a zA Z0 9 you
  • 尝试使用模拟在远程计算机上运行 PowerShell 脚本时出现“不允许请求的注册表访问”

    这是我第一次尝试从 C 应用程序执行 PowerShell 脚本 我使用 PowerShell 是因为我需要在远程计算机上执行的 exe 的输出 我能够使用 WMI 在远程计算机上运行 exe 但无法获得所需的输出 无论如何 过去一天左右我