我试图从直接包含源目录内容的目录创建zip,而不是源目录,然后是内容,然后将内容上传到Azure。
所以我有C:\ temp \ aFolder,使用Write-Zip PSCXE
创建一个zipwrite-zip c:\temp\test c:\temp\test2.zip
或Create-7zip功能
function create-7zip([String] $aDirectory, [String] $aZipfile){
[string]$pathToZipExe = "C:\Program Files (x86)\7-zip\7z.exe";
[Array]$arguments = "a", "-tzip", "$aZipfile", "$aDirectory", "-r";
& $pathToZipExe $arguments;
}
create-7zip "c:\temp\test" "c:\temp\test.zip"
两种方式都将创建一个ZIP目录,其中包含源目录。
所以它将是:TEST.ZIP - >测试 - >为myContent。
我想要的是:TEST.ZIP - >为myContent。这可能吗?我无能为力。
非常感谢任何想法/帮助。
编辑:因为我无法回答我自己的问题
OH我的上帝。 @MJOLNIR再次救了我,我刚刚在另一篇文章中找到了答案。我道歉。
答案是使用(如果安装了.NET 4.5)
$src = "c:\temp\test"
$dst = "c:\temp\test3.zip"
[Reflection.Assembly]::LoadWithPartialName( "System.IO.Compression.FileSystem" )
[System.IO.Compression.ZipFile]::CreateFromDirectory($src, $dst)
将产生TEST.ZIP - >内容。
答案 0 :(得分:0)
请注意.Net Framework 4.5之前不支持ZipFile
类。
但实际上并不需要最新和最好的框架以及外部工具。这样的事情也应该有效:
$folder = 'C:\temp\test'
$zipfile = 'C:\path\to\your.zip'
# create the zip file
$b = 'P', 'K', 5, 6 | % { [char]$_ }
$b += 1..18 | % { [char]0 }
[IO.File]::WriteAllBytes($zipfile, [byte[]]$b)
$app = New-Object -COM 'Shell.Application'
$src = $app.NameSpace($folder)
$dst = $app.NameSpace($zipfile)
# copy items from source folder to zip file
$dst.CopyHere($src.Items())
# wait for copying to complete
do {
Start-Sleep -Milliseconds 200
} until ($src.Items().Count -eq $dst.Items().Count)