这是我的powershell代码:
$SourceZipFolder = "C:tempTESTtempzip"
New-Item -type directory -path $SourceZipFolder
[Reflection.Assembly]::LoadWithPartialName( "System.IO.Compression.FileSystem" ) | Out-Null
$CompressionLevel= [System.IO.Compression.CompressionLevel]::Optimal
$FileSource = Get-ChildItem -Path "C:tempTEST" | Where-Object LastWriteTime -lt (get-date).AddDays(-2)
Move-Item $FileSource.FullName -Destination $SourceZipFolder
Foreach ($Fichiers in $FileSource) {
$ZipDestination ="C:tempTESTarchive$($Fichiers.Name).zip"
[io.compression.zipfile]::CreateFromDirectory($SourceZipFolder, $ZipDestination, $CompressionLevel)
}
Remove-Item -Path $SourceZipFolder -Recurse
我在执行时遇到了这个错误:
Cannot find an overload for "CreateFromDirectory" and the argument count: "3".
At C:UserstestDesktoptemp.ps1:17 char:1
+ [io.compression.zipfile]::CreateFromDirectory($SourceZipFolder, $ZipDestination, ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : MethodCountCouldNotFindBest
我的ForEach
循环不接受[io.compression.zipfile]::CreateFromDirectory
中的$CompressionLevel
参数,我不明白为什么。。。因为当我使用For
循环而不是ForEach
时。。。
感谢的帮助
我使用Powershell V4。
如果您想设置压缩级别而不关心编码类型,则需要使用以下方法签名:
CreateFromDirectory(String, String, CompressionLevel, Boolean)
https://msdn.microsoft.com/en-us/library/hh485721%28v=vs.110%29.aspx
对于代码的相关部分:
Foreach ($Fichiers in $FileSource) {
$ZipDestination ="C:tempTESTarchive$($Fichiers.Name).zip"
[io.compression.zipfile]::CreateFromDirectory($SourceZipFolder, $ZipDestination, $CompressionLevel, $false)
}
请注意末尾的附加参数。如果希望基本源目录包含在zip文件中,则需要使用$true;如果只希望源目录的内容包含在zip中,则使用$false。