通过Dnspy调试解决powershell使用Install-module指定的转换无效的问题

news2024/9/23 23:28:29

之前运行Install-module -Name NtObjectManager出现以下错误:

PackageManagement\Install-Package : Package 'NtObjectManager' failed to be installed because: 指定的转换无效。
At C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:1809 char:21
+ ...          $null = PackageManagement\Install-Package @PSBoundParameters
+                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidResult: (NtObjectManager:String) [Install-Package], Exception
    + FullyQualifiedErrorId : Package '{0}' failed to be installed because: {1},Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackage

之后使用PackageManagement\Install-Package NtObjectManager直接安装

PackageManagement\Install-Package : Package 'NtObjectManager' failed to be installed because: 指定的转换无效。
所在位置 行:1 字符: 1
+ PackageManagement\Install-Package NtObjectManager
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidResult: (NtObjectManager:String) [Install-Package],Exception
    + FullyQualifiedErrorId : Package '{0}' failed to be installed because: {1},Microsoft.PowerShell.PackageManagement
   .Cmdlets.InstallPackage

还是出错,但是别的电脑上没有问题。
于是用dnspy调试,附加到进程,调试发现有些局部变量显示不了提示:

当线程位于不安全状态时无法计算表达式。按步调试或运行直到触发断点。

看了这个说明,用管理员模式下的dnspy直接启动powershell.exe,之后就能显示局部变量了:

由于报错提示的是PackageManagement\Install-Package这个模块,去系统里看了下,确实有这个模块,在C:\Program Files (x86)\WindowsPowerShell\Modules\PackageManagement\1.0.0.1目录下。
看了下PackageManagement.psd1这个文件发现:
在这里插入图片描述
Install-Package在Microsoft.PackageManagement.dll这个文件里,用dnspy载入程序之后先break 暂停,然后在线程里面一个个选,就能通过栈帧的名字找到对应的线程。
在这里插入图片描述

也可以先打开dll,在install-package函数下断点然后再启动程序。
在这里插入图片描述
一步步调试,中间会遇到类似invoke的函数,这个是另起新命令的线程了,不要跟进去,可以通过powershell.command变量成员看命令和参数自行判断。不然会有比较复杂的代码出现。
在这里插入图片描述
这里是调用Nugetclient来下载包

在这里插入图片描述
继续步进,看到了Nugetclient里面下载包的函数
在这里插入图片描述
继续步进,发现执行到这一句话之后步进程序就不往下走了,直接返回了,终端也报错了。
在这里插入图片描述

看起来和OSInformation.isFipsEnabled的get函数有关,去那个函数里面下了好多断点,因为这个函数压根没法步进,一步进就返回。发现读取了注册表

在这里插入图片描述
继续走,发现到这步以后就返回了,程序不继续往下走了
在这里插入图片描述
根据错误提示,指定的转换无效的问题,那么肯定是这个函数里面出现看一些问题。通过查询手册发现array2数组类型有可能和返回值不匹配,所以报了这个错误。

于是去没有问题的电脑上看了下值:
在这里插入图片描述
而有问题的电脑上:
在这里插入图片描述
很明显不一样,一个是字符串一个是数值,显然数值正确,于是把有问题的值删掉改成REG_DWORD,再运行,果然没问题了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/510557.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Shell编程之排序

目录 一、冒泡排序 二、选择排序 三、插入排序 基本思想: 四、反转排序 基本思想: 五、睡眠排序 六、希尔排序 基本思想: 举例 一、冒泡排序 冒泡排序,该排序的命名非常形象,即一个个将气泡冒出。冒泡排序一…

ChatDOC工具——使用ChatGPT高效阅读技术科研论文

ChatDOC是一款功能强大的人工智能阅读辅助工具,专为帮助用户快速理解论文内容而设计。使用ChatDOC,您可以通过上传PDF版论文文献,利用先进的ChatGPT技术,只需三个简单步骤,便可以高效地阅读论文,提高阅读效…

TypeScript初识

目录 介绍 定义 优点 类型声明 ts文件编译选项 自动编译 编译选项的各个属性 include compilerOptions 介绍 定义 TS(TypeScript)是一种由微软开发的编程语言,它是 JavaScript 的一个超集,提供了静态类型检查、类、接…

Linux系统编程——多线程[中]:互斥与同步

0.关注博主有更多知识 操作系统入门知识合集 目录 1.并发过程中的问题 2.互斥 2.1互斥锁 2.2如何看待互斥锁 2.3加锁和解锁的本质 2.4对锁做一个封装 2.5可重入函数与线程安全 2.6死锁 3.同步 3.1条件变量 1.并发过程中的问题 我们知道,同一个进程中的…

【SpringBoot】过滤器,监听器,拦截器介绍

文章目录 一、简介1、过滤器2、拦截器3、监听器 二、如何创建1、过滤器2、监听器3、拦截器 三、总结 一、简介 通过两幅图我们可以理解拦截器和过滤器的特点 1、过滤器 过滤器是在请求进入tomcat容器后,但请求进入servlet之前进行预处理的。请求结束返回也是&…

模拟IC与数字IC设计该怎么选?哪个岗位薪资高?

很多同学想要入行IC,但不知道数字和模拟方向怎么选? 如果没有亲身体会过模拟设计,并有发自内心的自信或者兴趣,一般不看好纯小白去学模拟电路设计。 模拟设计想做好,没有数学功底,没有电路分析的功底&…

面试题30天打卡-day24

1、Redis 为什么快? Redis 之所以快,主要是因为它具有以下特点: 纯内存操作:Redis 的数据存储在内存中,因此读写速度非常快,而无需像传统数据库一样从硬盘读取和写入数据。与此同时,Redis 支持…

【算法】动态规划算法求(编辑距离)

目录 编辑距离: 举例: 代码如下 调试: 核心代码: 画图演示上述代码: 编辑距离: 是一种计算两个自符串之间差异程度的方法,它通过比较两个字符串之间的插入,删除和 替换操作的数…

深度神经网络模型部署——Docker学习

容器技术中有三个核心概念:容器(Container)、镜像(Image),以及镜像仓库(Registry) 从本质上来说,容器属于虚拟化技术的一种,和虚拟机(Virtual Mac…

CentOS7安装vsftpd

CentOS7安装vsftpd 最近又用到ftp了,摸索了一下终于安装成功,记录下安装过程,本次使用的操作系统为 CentOS7,ftp使用vsftpd。 安装vsftpd yum install -y vsftpd配置vsftpd vsftpd的配置文件路径为:/etc/vsftpd/vs…

软件测试基础面试题大全(上)

1. 软件生命周期是什么? 软件生命周期:需求调研(可行性研究)、需求分析(需求规格说明书)、设计(系统架构、模块设计、表结构设计、接口设计等,产出概要设计文档和详细设计文档&…

表达式求值问题-双栈模板化实现

好久不见,真的很久都没有更新博客了,最近很多事情,所以比较忙碌,没有时间每天都学算法,但是我会挤时间尽量做到,每两三天就更新博客,我会努力的,加油~ 前言:计算器都见过…

加码本地生活、成为“万能入口”,抖音完成了百度曾经的梦想

文|螳螂观察 作者| 小别 前有美团点评,后有阿里巴巴,本地生活服务从来就不平静。 并没有在最好的时间出发的抖音,还是顺着短视频的内容优势,从团购、本地游、外卖再到近期推出商城频道,逐步完善了本地生活服务的布局…

浅谈jmeter性能测试步骤入门

一、Jmeter简介 1 概述 jmeter是一个软件,使负载测试或业绩为导向的业务(功能)测试不同的协议或技术。 它是 Apache 软件基金会的Stefano Mazzocchi JMeter 最初开发的。 它主要对 Apache JServ(现在称为如 Apache Tomca…

linux命令文本命令之~~~ sort ~~ tr ~~cut ~~ uniq

目录 一. sort命令二. uniq 命令三. tr命令四. cut命令 一. sort命令 以行为单位对文件内容进行排序,也将他根据不同的数据类型来排序 比较原则是从首字符向后,依次按ASCII码进行比较,最后按照升序输出排序 语法格式: sort 【选…

Web自动化测试:selenium的使用以及关于driver=webdriver.Firefox()无驱动报错问题

Selenium 1.什么是Selenium? Selenium是一个用于Web应用程序测试的工具。 主流的自动化测试工具有: web自动化测试:selenium、robot frameworkApp端自动化测试:Appium、Monkeyrunner、UIautomationPC客户端(win32&…

打印机错误0x00000bc4,Win11系统找不到打印机怎么办

近期,又有不少小伙伴更新了Win11系统后,出现了打印机提示错误代码0x00000bc4,出现错误后,可能导致打印机无法正常工作,打印任务无法完成,或者打印机无法连接到电脑等问题。驱动人生就为大家带来打印机错误0…

使用docker部署wiki.js

安装docker这些就不讲了,教程一堆,相关的安装教程可以去官网看,只是没那么详细,尤其是有关数据库的配置:Docker 部署 Wiki.js pull wiki镜像: docker pull ghcr.io/requarks/wiki 如果是arm的机器&#xf…

Oracle存储过程~封神之作

简介 Oracle 存储过程是 Oracle 数据库中的一种数据处理对象,它可以在数据库中定义一组预定义的 SQL 语句,用于完成特定的数据库操作。存储过程可以被授权的用户调用,并且可以执行多个语句,这些语句可以被视为一个单独的操作&…

【逗老师的无线电】快速记录一下MMDVM串口屏相关

最近在研究MMDVM的串口屏,设计知识点比较多,本文先随手记一下,同时随时更新,最后形成完整的文档 一、Nextion和国内串口屏设计 MMDVM默认对接的是Nextion屏幕。但是有人跟我说,NXT的屏幕和国内陶晶驰的屏幕就是一个…