다음 날짜에 지정된 날짜보다 오래된 파일을 가져 와서 다른 폴더에 보관 파일로 저장합니다. 이 스크립트는 대부분의 파일에서 제대로 작동하지만 일부 파일의 경우이 오류를 제공하며 아카이브에 해당 파일을 포함하지 않습니다.스크립트가 실행될 때 사용중인 파일을 강제로 닫습니다.
Move-Item : The process cannot access the file because it is being used by another process.
At C:\SRS\SRSLogArchieveScript.ps1:49 char:13
+ Move-Item <<<< $item.FullName $destPathController -force;
+ CategoryInfo : WriteError: (C:\SRS\Controll...apter0611-1.log:FileInfo) [Move-Item], IOException
+ FullyQualifiedErrorId : MoveFileInfoItemIOError,Microsoft.PowerShell.Commands.MoveItemCommand
내가 -move item
와 -force
를 사용하고 있지만, 여전히이 문제를 가지고 그러나. 실제로 모든 파일을 닫아 강제로 모든 파일을 아카이브의 일부로 포함시킬 수있는 방법이 있습니까?
try
{
foreach($item in (Get-ChildItem $sourcePath -recurse | Where-Object { $_.CreationTime -le $archiveTillDate }))
{
$item.FullName;
Move-Item $item.FullName $destPath -force;
}
}
catch
{
$_.Exception.Message;
}
Finally
{
#Executing Zip Command to Archieve:
& $pathTo7ZipExe $arguments;
#Delete temporary log archieve directory
Remove-Item $logArchieve -recurse;
}
[Handle.exe] (http://stackoverflow.com/questions/241178/command-line-tool-for-finding-out-who-is-locking-a-file)를 사용하여 프로세스를 식별 할 수 있습니다 파일을 사용 중입니다. 그런 다음 프로세스를 종료 할 수 있습니다. 그리고 잠긴 동안 파일을 덮어 쓰는 것을 의미합니다. 나는 그것이 불가능하다고 생각합니다. –