gpt4 book ai didi

powershell - 如何在Powershell中添加该程序集并使用其功能?

转载 作者:行者123 更新时间:2023-12-03 00:01:35 25 4
gpt4 key购买 nike

我想在Powershell中使用Pkcs12ProtectedConfigurationProvider DLL。特别是,我想实例化其类并在Powershell中调用该类的Encrypt()和Decrypt()方法,因此我可以编写对Web.config连接字符串进行加密和解密的函数。

如果我在dotPeek中检查DLL,则会看到它定义了一个 namespace PKCS12ProtectedConfigurationProvider,并在该 namespace 中定义了一个同名类。

我希望能够根据我在网络上了解到的其他程序集的知识来添加类型,然后实例化该类。 This page on using WinSCP with Powershell仅是示例。

我可以毫无问题地添加类型。

PS> $asmPath = "C:\ProgramData\chocolatey\lib\Pkcs12ProtectedConfigurationProvider.1.0.1\lib\NET40\PKCS12ProtectedConfigurationProvider.dll"
PS> Add-Type -Path $asmPath

但是,我无法创建对象

PS> new-object PKCS12ProtectedConfigurationProvider.PKCS12ProtectedConfigurationProvider
new-object : Cannot find type [PKCS12ProtectedConfigurationProvider]: verify that the assembly containing this type is loaded.

我可以看到它确实加载了

PS> $asm = [appdomain]::CurrentDomain.GetAssemblies() |? { $_.Location -eq $asmPath }
PS> $asm

GAC Version Location
--- ------- --------
False v4.0.30319 C:\ProgramData\chocolatey\lib\Pkcs12ProtectedConfigurationProvider.1.0.1\lib\NET40\PKCS12ProtectedConfigurationProvider.dll

PS> $asm.FullName
PKCS12ProtectedConfigurationProvider, Version=1.0.0.0, Culture=neutral, PublicKeyToken=34da007ac91f901d

并且,如果我使用 -PassThru添加类型,我可以看到它确实在某处具有我想要的成员函数(成员列表的长度进行了修整):

PS> $type = Add-Type -Path $asmPath -PassThru
PS> $type.GetMembers() | Select-Object name,membertype,declaringtype,module

Name MemberType DeclaringType Module
---- ---------- ------------- ------
...
Initialize Method Pkcs12ProtectedConfigurationProvider.Pkcs12ProtectedConfigurationProvider PKCS12ProtectedConfigurationProvider.dll
Decrypt Method Pkcs12ProtectedConfigurationProvider.Pkcs12ProtectedConfigurationProvider PKCS12ProtectedConfigurationProvider.dll
Encrypt Method Pkcs12ProtectedConfigurationProvider.Pkcs12ProtectedConfigurationProvider PKCS12ProtectedConfigurationProvider.dll
...

如何调用这些成员函数?

为什么我不能以我期望的方式称呼他们?

最佳答案

通过反射,我看到Pkcs12ProtectedConfigurationProvider类被标记为internal,并且没有显式构造函数。我可以通过在唯一的(空) Invoke method上调用 constructor 来实例化它:

$type = Add-Type -Path 'PKCS12ProtectedConfigurationProvider.dll' -PassThru;
$emptyConstructor = $type.DeclaredConstructors[0];
$provider = $emptyConstructor.Invoke($null);

关于powershell - 如何在Powershell中添加该程序集并使用其功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26493309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com