在PowerShell中加载特定的DLL

时间:2017-10-11 15:32:23

标签: .net powershell dll

我尝试使用以下代码在PowerShell中加载特定的DLL:

function New-SpecificAssembly {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true)]
        [string]$Path
    )
    process {
        [string]$Fullname = ([System.Reflection.AssemblyName]::GetAssemblyName($Path)).FullName
        Write-Verbose "Loading: $Fullname"
        Write-Output ([System.Reflection.Assembly]::Load($FullName))
    }
}

$d11_Security = New-SpecificAssembly -Path 'C:\Windows\Microsoft.NET\Framework\v1.1.4322\System.Security.dll' -Verbose
$d11_Security | ft ImageRuntimeVersion, Location -autosize

但是,我找不到一种方法来加载它的.net1.1版本的DLL。以上返回:v2.0.50727 / C:\Windows\assembly\GAC_MSIL\System.Security\2.0.0.0__b03f5f7f11d50a3a\System.Security.dll

其他信息

LoadFrom

注意:我还尝试使用LoadFrom详细信息:https://stackoverflow.com/a/9447959/361842;但是它返回了dll的v2版本。检查https://msdn.microsoft.com/en-us/library/1009fa28(v=vs.110).aspx

  

LoadFrom方法具有以下缺点。请考虑使用Load。

     
      
  • 如果已加载具有相同标识的程序集,则即使指定了不同的路径,LoadFrom也会返回已加载的程序集。
  •   

尽管有这样的建议,但事实证明Load有同样的警告。即每https://msdn.microsoft.com/en-us/library/ky3942xh(v=vs.110).aspx

  

如果assemblyString指定完整的程序集名称,则抛出FileLoadException,并且与简单名称匹配的第一个程序集具有不同的版本,区域性或公钥标记。加载程序不会继续探测与简单名称匹配的其他程序集。

的LoadFile

我认为LoadFile可能在LoadFrom失败的地方工作,因为我们明确说明了文件路径。 https://msdn.microsoft.com/en-us/library/b61s44e8(v=vs.110).aspx。遗憾的是,虽然文档没有报告任何潜在的问题(除了没有加载的依赖项),但是这仍然会返回错误的版本:

ImageRuntimeVersion Location
------------------- --------
v2.0.50727          C:\Windows\assembly\GAC_MSIL\System.Security\2.0.0.0__b03f5f7f11d50a3a\System.Security.dll

更多详情

注意:由于我们正在查看x86 dll,因此我正在运行PowerShell x86(即%SystemRoot%\syswow64\WindowsPowerShell\v1.0\powershell.exe)。

这样做的原因是为了帮助调查将遗留站点从旧的Windows 2003服务器迁移到Windows 2008 R2的问题,已经按照此处列出的步骤进行了调查:https://docs.microsoft.com/en-us/iis/install/installing-iis-7/how-to-install-aspnet-11-with-iis-on-vista-and-windows-2008。遗憾的是,我们无法访问此网站的来源,因此重新编码不是一种选择。该错误提及InvokeMember("_GetRoles", /* ... */,因此我假设他们已使用反射技术来确定角色,如下所述:https://www.thecodingforums.com/threads/enumerate-roles-a-user-belongs-to-seek-vb-net-sample.85831/。 PowerShell只是我玩DLL的方式,以了解可能正在进行的内容/试图查看DLL是否可以正确加载/等等,即它对我来说是一种方式捅了一下。

0 个答案:

没有答案