使用Add-Type加载System.IO.Compression.FileSystem会抛出错误

时间:2017-02-08 17:39:51

标签: powershell powershell-v2.0 powershell-v3.0

我想使用PowerShell提取zip文件。所以,我用这个:

Add-Type -AssemblyName System.IO.Compression.FileSystem

# some code to download the zip file from FTP #

[System.IO.Compression.ZipFile]::ExtractToDirectory($localpath+"\Test.zip",$localpath)

我收到错误:Add-Type:无法添加类型。汇编' System.IO.Compression.FileSystem'无法找到。

然后我搜索了StackOverflow并更改了

Add-Type -AssemblyName System.IO.Compression.FileSystem

Add-Type -Path "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.IO.Compression.FileSystem.dll"

它说:

Error: Could not load file or assembly 'file:///C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFram
ework\v4.6.1\System.IO.Compression.FileSystem.dll' or one of its dependencies. This assembly is built by a runtime newer
 than the currently loaded runtime and cannot be loaded.

我实际上可以在v4.6.1路径中看到这个dll。它就在那里。请问我的语法有什么问题?

3 个答案:

答案 0 :(得分:1)

你的语法没有错;问题是程序集与您的PowerShell版本不兼容 - 这正是第二个错误所说的。对于第一个错误,PowerShell可能根本没有将该路径作为其搜索程序集DLL的路径的一部分,因为它们不兼容(再次,请参阅第二次尝试的错误,您指定了程序集的正确路径)

如果可以,您可能需要考虑updating your PowerShell (and Windows Management Framework)。 PowerShell的当前版本是5。

答案 1 :(得分:1)

如果您使用的是Powershell版本5+,则可以使用Expand-Archive解压缩文件。请参阅此msdn链接。

答案 2 :(得分:0)

我有一个类似的问题,使用Compress-Archive可以在Win10上工作但在Win Srv 2012 R2上没有,甚至认为语法是正确的,并且每个路径上面都存在dll。我注意到Win10上的PowerShell版本是5,而WinSrv上的版本是4所以我安装了Windows Management Framework(WMF)5.1,其中包含并更新到PS,然后当WinSrvR2上的PS版本也是5时,此命令工作