2014-06-12 4 views
1

다음 날짜에 지정된 날짜보다 오래된 파일을 가져 와서 다른 폴더에 보관 파일로 저장합니다. 이 스크립트는 대부분의 파일에서 제대로 작동하지만 일부 파일의 경우이 오류를 제공하며 아카이브에 해당 파일을 포함하지 않습니다.스크립트가 실행될 때 사용중인 파일을 강제로 닫습니다.

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; 

} 
+1

[Handle.exe] (http://stackoverflow.com/questions/241178/command-line-tool-for-finding-out-who-is-locking-a-file)를 사용하여 프로세스를 식별 할 수 있습니다 파일을 사용 중입니다. 그런 다음 프로세스를 종료 할 수 있습니다. 그리고 잠긴 동안 파일을 덮어 쓰는 것을 의미합니다. 나는 그것이 불가능하다고 생각합니다. –

답변

-2

피드백 보내기 현재 상태 현재 상태 열린 파일을 유지하고있는 원래의 응용 프로그램이 파일에 쓰기를 시도한다고 생각하십시오. 기본 파일을 "도난당한"경우 어떻게됩니까? 충돌에서 예상치 못한 동작에 이르는 모든 것. 이러한 일을 방지하기 위해 모든 최신 OS는 권한이없는 사용자로부터 이러한 작업을 방지합니다.

즉, Sysinternals'Handle.exe과 같은 도구를 사용하여 파일에 핸들이 열려 있는지 확인할 수 있습니다. 충분한 권한이 있으면 같은 도구로 핸들을 닫을 수 있습니다.

또 다른 해결책은 읽기 및 쓰기 액세스가 가능한 open the file입니다. 이렇게하면 예약 된 파일을 필터링 할 수 있습니다. 잠금을 해제 한 직후 파일을 열지 않는 프로세스는 없다고 가정합니다. 확실한 유일한 방법은 파일 내용을 보관 위치에 저장하고 독점 쓰기 잠금을 사용하고 마지막으로 파일을 삭제하는 것입니다.

+1

이것은 Windows 독점 "기능"이며 다양한 형태의 시스템 손상의 실제 원인입니다. 이것은 "Modern OS"에서 어떻게 이루어 졌는지는 명확하지 않습니다. Linux는 파일 잠금을 다르게 처리합니다. – Argo

+0

@Argo 필자는 Windows가 아닌 시스템에서 파일 잠금에 대해 논의하는 것이 왜 3 년 전 Powershell 질문과 관련이 있는지를 보지 못했습니다 * 시스템 손상에 대한 주장을 뒷받침하는 소스에 대한 참조 및 잠금 작동 방법을 추가하여 의견을 개선하십시오 리눅스에서. 현재로서는, 단지 소문입니다. – vonPryz

+1

거짓 주장이 얼마나 오래되었는지는 중요하지 않습니다. 문제는 그것이 틀렸고 커뮤니티 가이드 라인에 따라 수정 된 것을보고 싶습니다. 파일 잠금에 관해서는 여기에서 구현 세부 정보를 찾아 볼 수 있습니다. https://en.m.wikipedia.org/wiki/File_locking – Argo

관련 문제