【发布时间】:2021-09-13 03:39:45
【问题描述】:
我对 Powershell 脚本不太熟悉,希望您能在这里提供帮助。
我有这段代码可以删除“X”天前的文件,然后压缩它们并将它们移动到另一个文件夹。这是为了优化空间。
现在在这个过程中,我需要完全跳过一个文件夹,而不是处理它。这是我需要帮助的地方,因为我不知道在哪里放置跳过条件。
我知道有-notmatch 之类的命令,但对位置有点困惑。
代码如下:
param([string]$destination="XXX")
$source = "XXX"
$ErrorActionPreference = “SilentlyContinue" #to avoid printing non-terminating errors
Function Clean_Drive([string]$path){ #define the function
$Target = $destination + "\zip\*"
Write-Host "*****TESTING1*****" $Target
[Reflection.Assembly]::LoadWithPartialName('System.IO.Compression')
#Delete zip files older than 20 or more days
if (Test-Path $Target){
$lmt = (Get-Date).AddDays(-15)
Write-Verbose -Verbose "Deleting zip files:"
Get-ChildItem -Path $Target -Recurse -Force
Where-Object { ! $_.PSIsContainer -and $_.CreationTime -le $lmt } |
Remove-Item -Force -Verbose
}
$now=Get-Date
$files=Get-ChildItem -path $path -recurse -force -file
$files | Select-Object Name, fullname, CreationTime, LastWriteTime, LastAccessTime
$files | Add-Member -MemberType ScriptProperty -Name Owner -Value { (Get-Acl $this.FullName).Owner }
# Create a variable to store columns for report variable
$stats = "" | select Run_date, Location_of_File, Filename, DaysOfFile, LastAccessTime, Owner
$firstArchive = ""
$zipfile_list = [System.Collections.ArrayList]::new();
$zipfile_list2 = [System.Collections.ArrayList]::new();
$zipfile_list3 = [System.Collections.ArrayList]::new();
$finaL_outputzipfile = [System.Collections.ArrayList]::new();
foreach ($file in $files)
{
$day_file = [int]($now.subtract(($file.LastWriteTime))).days
$stats.Run_date = get-date
$source_file = $file.fullname.replace($file.name, "")
$stats.Location_of_File = $file.fullname.replace($file.name, "")
$stats.DaysOfFile = $day_file
$owner_name = @( $file.Owner.split("\") )
$stats.Owner = $owner_name[-1]
$stats.Filename = $file.name
$stats.LastAccessTime = [int]($now.subtract(($file.LastAccessTime))).days
# Prepare file name for name of output zip file
$separator = “\“
$output_reportFile = $destination + "\" + "Report_For_Dropbox_$(get-date -f yyyy-MM-dd).csv "
Export-Csv -Path $output_reportFile -InputObject $stats -Append
#For files 3 or more days, prepare to zip it up
# if ($stats.Filename -like "*.mp4" -OR $stats.Filename -like "*.mov"){
# write-host "*****Do not delete*****" $stats.Filename}
# else{
if ($stats.LastAccessTime -ge 3) {
# add to array
$zipfile_list.Add($stats.Location_of_File)
}
# }
}
write-host "*****ZIPFILE_LIST*****" $zipfile_list
write-host " "
#Select only distinct value in Array
$zipfile_list2 = $zipfile_list | select -Unique
write-host "*****ZIPFILE_LIST UNIQUE*****" $zipfile_list2
write-host "*****TESTING2*****" $zipfile_list2.count
for ($i=1;$i -le $zipfile_list2.count; $i++) {
$zipfile_list3 += $zipfile_list2[$i]
}
# de-dup again for the final list of directory to zip
$final_zipfilelist = $zipfile_list3 | select -Unique
write-host "***Printing final zip list***" $final_zipfilelist
write-host "*****TESTING3*****" $final_zipfilelist.count
write-host " "
# Start of zipping process
# preparing the password
$randomPassword = "XXX"
for ($i=0;$i -le ($final_zipfilelist.count-1); $i++) {
$output_zip_filename1 = $final_zipfilelist[$i].Replace(":", "")
$output_zip_filename1 = $output_zip_filename1.Replace("\", "_")
$output_zip_filename1 = $output_zip_filename1.Replace(" ", "_")
$output_zip_filename = $output_zip_filename1.substring(0, $output_zip_filename1.Length-1)
write-host "***Output zip file name: ***" $output_zip_filename
write-host " "
$ZipOutputFilePath = "$($destination +"\zip\" + “OUTPUT_ARCHIVE_FOR_” + $output_zip_filename + ".zip")"
$FilesToZip = $final_zipfilelist[$i] + "*"
$arguments = "a -tzip ""$ZipOutputFilePath"" ""$FilesToZip"" -mx9 -p$randomPassword"
$windowStyle = "Normal"
$p = Start-Process "XXX\7zip\7za.exe" -ArgumentList $arguments -Wait -PassThru -WindowStyle $windowStyle
$output_zip_filename1 = ""
}
if (Test-Path $ZipOutputFilePath){
for($i=0; $i -le $final_zipfilelist.Count; $i++){
Remove-Item -Path $final_zipfilelist[$i] -Recurse | where $stats.LastAccessTime -ge 3
}
}
}
Clean_Drive $source
【问题讨论】:
标签: powershell powershell-2.0 powershell-3.0 powershell-4.0