PowerShell中使用.NET将程序集加入全局程序集缓存

 通常情况下,将程序集(Assembly)加入全局程序集缓存(GAC,Global Assembly Cache),可以使用GacUtil工具。只要使用/i参数,就可以把指定路径的程序集添加进GAC了。

不过由于GacUtil并不是.Net Framework的一部分,而是和Windows SDK一起发布的,这就导致了机器中安装了.Net,却可能找不到GacUtil的情况。

在PowerShell中,我们可以直接使用.Net的类库来搞定这件事,而不需要通过GacUtil。具体代码如下:

1
2
3
4

[Reflection.Assembly]::LoadWithPartialName("System.EnterpriseServices") > $null
[System.EnterpriseServices.Internal.Publish] $publish =
New-Object System.EnterpriseServices.Internal.Publish
$publish.GacInstall("<DLL的完整路径>")

另外,System.EnterpriseServices.Internal.Publish还提供了类似RegAsm的功能,具体可以查询MSDN。

时间: 2024-08-01 12:05:20

PowerShell中使用.NET将程序集加入全局程序集缓存的相关文章

把程序集安装到全局程序集缓存中的步骤_实用技巧

步骤: 1.先创建类库项目,完成编码: 2.对类库项目生成强命名,生成密钥文件:(该名称是加密的哈希密钥或签名.这种强名称可确保正确的组件版本控制.这有助于防止具有相同名称的组件相互冲突或被消耗应用程序误用) 使用.net Framework 开发包中bin目录下的SN工具生成加密密钥对,例如:在D盘建立文件夹:GACkey,然后在命令行中执行:sn -k "D:\GACkey\GACkey.snk" ,则在D:\GACkey\GACkey.snk就会生成密钥文件: 3.关联类库文件和

如何将程序集安装到全局程序集缓存(GAC)

问题描述 编写了一个MSN的插件,在引用时需要放到全局程序集缓存中.平时自己用时都是手动拖进去.现在我想做一个"setup.exe"安装程序,怎么样才能在安装过程中将自己编写的.dll文件注册到全局程序集缓存中.谢谢帮忙! 解决方案 解决方案二:至少可以使用.NETFrameworkSDK中提供的命令行程序gacutil.exe将指定程序集注册到GAC.例如:"gacutil/imyDll.dll".详细参数说明请参阅相关文档或在命令行中键入gacutil/?.

PowerShell中删除空格、点号、减号和换行方法代码实例

  这篇文章主要介绍了PowerShell中删除空格.点号.减号和换行方法代码实例,本文直接给出实例代码,需要的朋友可以参考下 代码如下: $text = ' ... Hello ...--- ' $text.Trim(" .-`t`n`r") 结果只显示:Hello

PowerShell中字符串分行显示的两种方法技巧

  这篇文章主要介绍了PowerShell中字符串分行显示的两种方法技巧,本文直接给出代码实例,需要的朋友可以参考下 复制代码 代码如下: $a="1111111111111111111111101111111111111111111111111111111111111110111111111111111111011111 11111111111111111111111111111111111111111111111111111111111111111111111101111" 字符串

PowerShell中编程清空IE缓存方法

  这篇文章主要介绍了PowerShell中编程清空IE缓存方法,本文代码同样适用于批处理程序,需要的朋友可以参考下 使用RunDll32.exe 来运行Internet选项的对应功能: Temporary Internet Files (Internet临时文件) RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8 Cookies RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 2 History

PowerShell中终止管道的方法

  这篇文章主要介绍了PowerShell中终止管道的方法,本文直接给出代码实例,需要的朋友可以参考下 如果你能够提前知道你想从管道中获取元素的个数,可以使用Select-Object来终止流处理命令的的管道,这会节省很多时间. 下面的例子会从Windows文件夹下搜寻 explorer.exe示例,因为Select-Object语句可以在管道找到结果的那一瞬终止管道.否则,Get-ChildItem会递归的遍历所有子目录然后匹配出你想要的结果. 代码如下: #requires -Version

使用管道符在PowerShell中进行各种数据操作

最近在培训PowerShell,在讲到Pipeline的时候,对于我这种长期和数据(数据库)打交道的人来说,觉得很实用,所以写此博文,记录一下. 无论是在Linux中写Bash脚本还是在Window上写PowerShell,管道符"|"是一个非常有用的工具.它提供了将前一个命令的输出作为下一个命令的输入的功能.在数据处理中,我们也可以使用管道符对数据进行各种操作. Import&Export导入导出 先说导入导出是为了能够为接下来的数据处理准备数据.在PowerShell中我们

PowerShell中的基础数据类型

PowerShell是一个面向对象的语言,在申明变量的时候不强制要求申明数据类型,使用$开头来申明变量即可. 基本数据类型 PowerShell本身是基于.Net开发出来的,所以在.Net中的基本数据类型,在PowerShell中也可以使用,只是在PowerShell中用"[]"来标识具体的数据类型.比如[int],[long],[string],[bool],[double]等. 使用-is来判断某个变量是否指定的数据类型,和C#中的is关键字是一样的.比如: $a=10; $a -

在msf和powershell中利用hotpotato进行提权

本文讲的是在msf和powershell中利用hotpotato进行提权,通过类似SMB协议的NTLM认证已经被微软修补了,不过HTTP到SMB正在使用这种验证,并且还用于创建高权限服务中.因为流量包中含有NTLM凭据并且正在通过伪代理服务器,因此可以将其捕获并传递到本地SMB侦听器,作为SYSTEM权限执行任何命令. Stephen Breen在他的博客(https://foxglovesecurity.com/2016/01/16/hot-potato/)中描述了这次攻击的所有阶段.这次攻击