Powershell 加载System.IO.Compression.FileSystem时,添加类型抛出错误

Powershell 加载System.IO.Compression.FileSystem时,添加类型抛出错误,powershell,powershell-2.0,powershell-3.0,Powershell,Powershell 2.0,Powershell 3.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) 我收到错误:添加类型:无法添加类型。找不到程序集“

我想使用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)
我收到错误:添加类型:无法添加类型。找不到程序集“System.IO.Compression.FileSystem”

然后我搜索了StackOverflow并换了衣服

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

它说:

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。它就在那里。请问我的语法有什么问题?

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


如果你能,你可能要考虑一下。PowerShell的当前版本是5。

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


如果你能,你可能要考虑一下。PowerShell的当前版本为5。

如果您使用的是PowerShell 5+版本,则可以使用
展开存档
来解压缩文件。请参阅此链接。

如果您使用的是Powershell 5+版,则可以使用
展开存档来解压缩文件。查看此链接。

我在使用Compress Archive时遇到了类似的问题,Compress Archive在Win10上工作,但在Win Srv 2012 R2上不工作。我甚至认为语法正确,并且dll存在于上述路径中。我注意到Win10上的PowerShell版本为5,WinSrv上的PowerShell版本为4,因此我安装了Windows Management Framework(WMF)5.1,其中包括并更新到PS,然后当WinSrvR2上的PS版本也为5时,该命令随后起作用。

我在使用Compress Archive时遇到类似问题,Compress Archive在Win10上起作用,但在Win Srv 2012 R2上不起作用。我甚至认为语法正确,并且dll存在于上述路径中。我注意到Win10上的PowerShell版本为5,WinSrv上的PowerShell版本为4,因此我安装了Windows Management Framework(WMF)5.1,其中包括并更新到PS,然后当WinSrvR2上的PS版本也为5时,该命令就起作用了。

更准确地说,Powershell V3仅加载.NET 4.0,而此类型包含在.NET 4.5中,因此是的,您需要WMF4才能使用它。是否允许PS3.0使用.NET 4.5?否;它是用.NET4.0编译的,以后不会知道任何事情。这就是为什么我建议更新到最新的PS和WMF。好的,我运行了$PSVersionTable.PSVersion,它说我使用的是PowerShell 2主要版本。我会更新我的WMF,看看是否有帮助。非常感谢。我将PowerShell更新为5。现在,它在这个旧语句Add Type-Path“WinSCPnet.dll”上抛出错误。它说“错误:无法加载文件或程序集”file:///C:\不支持demo\WinSCPnet.dll'或其依赖项之一。操作。(HRESULT中的异常:0x8013155)“但我将dll放在C:\demo文件夹中,并将其放在那里。是否也应该更新此语法?更准确地说,Powershell V3仅加载.NET 4.0,而此类型包含在.NET 4.5中,因此是的,您需要WMF4来使用它。是否允许PS3.0使用.NET 4.5?否;它是用.NET4.0编译的,以后不会知道任何事情。这就是为什么我建议更新到最新的PS和WMF。好的,我运行了$PSVersionTable.PSVersion,它说我使用的是PowerShell 2主要版本。我会更新我的WMF,看看是否有帮助。非常感谢。我将PowerShell更新为5。现在,它在这个旧语句Add Type-Path“WinSCPnet.dll”上抛出错误。它说“错误:无法加载文件或程序集”file:///C:\不支持demo\WinSCPnet.dll'或其依赖项之一。操作。(HRESULT中的异常:0x8013155)“但我将dll放在C:\demo文件夹中,并将其放在那里。这个语法也应该更新吗?
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.