我通过管理软件向我们组织中的计算机发送zip和powershell脚本,然后通过命令提示符执行powershell脚本。该脚本解压缩该文件夹,安装程序并向注册表添加一些注册表项。
如果计算机没有说策略阻止执行脚本,它会按预期运行,安装程序并导入注册表项。但如果它确实发出警告并且我将策略设置为不受限制,则会出现以下错误错误。我在Windows 8.1上并使用Powershell 4.0
Id not be found.
At C:\Temp\tps1.ps1:5 char:9
+ Add-Type <<<< -assembly "system.io.compression.filesystem"
+ CategoryInfo : ObjectNotFound: (system.io.compression.filesyste
m:String) [Add-Type], Exception
+ FullyQualifiedErrorId : ASSEMBLY_NOT_FOUND,Microsoft.PowerShell.Commands
.AddTypeCommand
Add-Type : Cannot add type. One or more required assemblies are missing.
At C:\Temp\tps1.ps1:5 char:9
+ Add-Type <<<< -assembly "system.io.compression.filesystem"
+ CategoryInfo : InvalidData: (:) [Add-Type], InvalidOperationExc
eption
+ FullyQualifiedErrorId : ASSEMBLY_LOAD_ERRORS,Microsoft.PowerShell.Comman
ds.AddTypeCommand
Unable to find type [io.compression.zipfile]: make sure that the assembly conta ining this type is loaded.
At C:\Temp\tps1.ps1:7 char:25
+ [io.compression.zipfile] <<<< ::ExtractToDirectory($BackUpPath, $destination) + CategoryInfo : InvalidOperation: (io.compression.zipfile:String
) [], RuntimeException
+ FullyQualifiedErrorId : TypeNotFound
有人有什么想法吗?
答案 0 :(得分:1)
在未安装.NET 4.5的系统上,使用:
$BackUpPath = "C:\Temp\Install.zip"
$Destination = "C:\Temp"
$shell_app=new-object -com shell.application
$zip_file = $shell_app.namespace($BackUpPath )
$destination = $shell_app.namespace($Destination )
$destination.Copyhere($zip_file.items(),0x4)
使用.NET 4.5的系统上的:
Add-Type -assembly "system.io.compression.filesystem"
[io.compression.zipfile]::ExtractToDirectory($BackUpPath, $destination)
technet上的脚本结合了上述两种方法。
在PowerShell V5上,这非常简化:
Expand-Archive $BackUpPath -destination $Destination
还有其他方法可以使用第三方库(如7-zip等)解压缩文件,但会产生依赖关系。
注意:可以使用组策略设置Powershell执行策略。请参阅链接here