也许我的问题可能是重复的,但我在PowerShell中是新的,并且无法弄清楚,我的脚本有什么问题,它会压缩特定的目录:
$path = "C:\backup\DEV82"
if(!(Test-Path -Path $path )){
New-Item -ItemType directory -Path $path
}
cd C:\inetpub\wwwroot\dev82\
$SOURCE = Get-ChildItem * -Directory|Where-Object {$_.FullName -match "App_Config|Resources|bin"}
$dtstamp = (Get-Date).ToString("yyyyMMdd_HHmmss")
Add-Type -assembly "system.io.compression.filesystem"
Foreach ($s in $SOURCE)
{
$DESTINATION = Join-path -path $path -ChildPath "$dtstamp.zip"
If(Test-path $DESTINATION) {
Remove-item $DESTINATION
}
[io.compression.zipfile]::CreateFromDirectory($s.fullname, $DESTINATION)
}
如果我在$SOURCE
变量中执行命令,它会收集所有必需的目录,我想要压缩http://prntscr.com/j0sqri
$ DESTINATION也会返回有效值
PS C:\> $DESTINATION
C:\backup\DEV82\20180404_223153.zip
但是现在只有zip文件中存在最后一个文件夹(参考资料)。
答案 0 :(得分:1)
$SOURCE
已经只是一个文件夹名称列表,因此您不需要FullName
属性:
[io.compression.zipfile]::CreateFromDirectory($s.fullname, $DESTINATION)
要么删除它,要么从管道中删除Select-Object
:
$SOURCE = Get-ChildItem * -Directory |
Where-Object {$_.FullName -match "App_Config|Resources|bin"} |
Select-Object -ExpandProperty FullName
答案 1 :(得分:1)
好的,我改写了我的脚本,使用了而不是Zipfile类,使用-Update压缩文件(-Update允许将文件\文件夹添加到现有存档中)
$path = "C:\backup\DEV82"
if(!(Test-Path -Path $path )){
New-Item -ItemType directory -Path $path
}
cd C:\inetpub\wwwroot\dev82\
$SOURCE = Get-ChildItem * -Directory|Where-Object {$_.FullName -match "App_Config|Resources|bin"}
$dtstamp = (Get-Date).ToString("yyyyMMdd_HHmmss")
$DESTINATION = Join-path -path $path -ChildPath "$dtstamp.zip"
Add-Type -assembly "system.io.compression.filesystem"
If(Test-path $DESTINATION) {
Remove-item $DESTINATION
}
Foreach ($s in $SOURCE)
{
Compress-Archive -Path $s.fullname -DestinationPath $DESTINATION -Update
}