Powershell을 사용하여 다음을 자동화하고 싶습니다. 1. 7 일이 지난 로그 파일 (.xml 및 .dat 확장자)의 압축, 2. 압축 된 아카이브 다른 곳에서 3. 원본 로그 파일을 원본에서 삭제합니다.Powershell을 사용하여 폴더 및 파일을 압축 한 다음 이전 파일을 삭제합니다.
나는 다양한 리소스에서 함께 뭉친 다음 Powershell 스크립트를 사용하고 있습니다. 이 만 파일 및 대상 폴더에 복사합니다을 아카이브로
function New-Zip
{
param([string]$zipfilename)
set-content $zipfilename ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
(dir $zipfilename).IsReadOnly = $false
}
function Add-Zip
{
param([string]$zipfilename)
if(-not (test-path($zipfilename)))
{
set-content $zipfilename ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
(dir $zipfilename).IsReadOnly = $false
}
$shellApplication = new-object -com shell.application
$zipPackage = $shellApplication.NameSpace($zipfilename)
foreach($file in $input)
{
$zipPackage.CopyHere($file.FullName)
Start-sleep -milliseconds 500
}
}
$targetFolder = 'C:\source'
$destinationFolder = 'D:\destination\'
$now = Get-Date
$days = 7
$lastWrite = $now.AddDays(-$days)
Get-ChildItem $targetFolder -Recurse | Where-Object { $_ -is [System.IO.FileInfo] } | ForEach-Object {
If ($_.LastWriteTime -lt $lastWrite)
{
$_ | New-Zip $($destinationFolder + $_.BaseName + ".zip")
$_ | Add-Zip $($destinationFolder + $_.BaseName + ".zip")
}
}
Get-ChildItem $targetFolder -Recurse -Include "*.dat", "*.xml" | WHERE {($_.CreationTime -le $(Get-Date).AddDays(-$days))} | Remove-Item -Force
이 스크립트는, 합리적으로 잘 작동 않습니다.
나는 C의 구조가있는 경우 : \ 소스 \ bigfolder \ logfile.dat, 폴더 구조를받지 않습니다 결과 zip 파일은 내가 좋아하는 것 같이
logfile.zip> bigfolder> 로그 파일을 대신
.DAT, 그냥 가져옵니다 logfile.zip> logfile.dat
수 이것을 알아내는 누군가의 도움이?
미세 조정을 더 잘 수행하려면 가능하면 특정 논리를 작성하여 특정 조건이 충족 될 때만 파일이 압축되도록하고 싶습니다. 내가 압축
원시 로그 파일은 다음과 같은 명명 루틴이 있습니다
Folders:
emstg#12_list\randomstring.xml
Individual log files:
emstg#12_query_data.xml
emstg#12_events_cache.dat etc...
이 파일의 시작 emstg 번호 번호와 동일 볼 수있다.
위의 스크립트에서 "이름 감지"메커니즘을 구현하는 방법은 무엇입니까?
감사
들으, 몇 가지 버그 나는 파일 이름의 시작 부분에 같은 이름 지정 규칙이있는 폴더와 파일을 여러 개있는 경우, 예를 들어,을 (당신이 원하는대로 코드를 수정)가 필요합니다 ** D : \ source \ emstg # 12 \ string.xml ** (폴더 및 파일) 및 개별 파일 : D : \ source \ emstg # 12_data.xml ** 또는 ** D : \ source \ emstg # 12_events.dat **, 비슷한 이름으로 인해 오류가 발생했습니다 : "4"인수로 "CreateFromDirectory"를 호출하는 예외 : "파일 'D : \ destination \ esmstg # 12.zip'이 (가) 이미 있습니다. * 임시 파일도 삭제되지 않습니다. 수정 된 코드는 다음과 같습니다 :'..... | Where-Object {$ _ -like "esmstg # 12 *"} | ForEach-Object {' ZIP은 같은 폴더/파일 구조를 유지해야합니다. – valdroni