- 파일이 생성된 특정한 기간이 지난 후에 자동으로 지우거나 옮길 필요가 있다. 특히 파일 서버를 운영하거나 FTP server를 운영할 때 필요하다. 또는 사용자 컴퓨터의 파일을 감시할 때도 필요하다.
- 예를 들면 c:\Temp 폴더나 File server에 저장된 Media File들을 저장소 관리를 위해서 특정 기간이 지나면 자동으로 삭제할 필요가 있다. 또한 사용자의 컴퓨터를 검색해서 음악 및 동영상 파일을 다른 서버로 이동하여 보관하는 것도 필요하다.
- 이것을 구현하기 위해서 다음과 같이 해 본다.
- 특정한 폴더의 내용을 먼저 본 후에 그것을 삭제한다.
Get-ChildItem -Path c:\Temp -Recurse | Remove-Item - 또는 c:\Windows, ‘C:\Program Files’ 폴더는 제외하고 *.mp3, *.mp4, *.avi 확장자를 가진 파일들만 찾아서 다른 컴퓨터(File server)로 이동한다.
Get-ChildItem -Path C:\ -Recurse -Exclude c:\Windows, ‘C:\Program Files’ -Filter *.mp3, *.mp4, *.avi | Move-Item -Destination \\FileServer\Shared - 이제는 현재를 시점으로 30일 전을 어떻게 표현을 하는지 생각해본다.
Get-Date
Get-Date | Get-Member
(Get-Date).AddDays(-30)
$today = Get-Date
$DaysToDelete = $Today.AddDays(-30) - 그 다음으로는 파일이 언제 만들어졌는지를 어떻게 확인할까?
Get-ChildItem c:\Temp | Get-Member
여기서 LastWriteTime을 주목한다. 이것은 파일이 생성되었거나 마지막으로 수정한 시간을 말한다.
Get-ChildItem C:\Temp -Recurse | Where-Object {$_.LastWriteTime -lt $DaysToDelete}
- 특정한 폴더의 내용을 먼저 본 후에 그것을 삭제한다.
- 이제 최종적으로 현재를 시점으로 30일 전에 만들어진 파일을 삭제하거나 이동하자.
Get-ChildItem C:\Temp -Recurse | Where-Object {$_.LastWriteTime -lt $DaysToDelete} | Remove-Item
Get-ChildItem C:\Temp -Recurse | Where-Object {$_.LastWriteTime -lt $DaysToDelete} | Move-Item -Destination \\FileServer\Shared
Get-ChildItem -Path C:\ -Recurse -Exclude c:\Windows, ‘C:\Program Files’ -Filter *.mp3, *.mp4, *.avi | Move-Item -Destination \\FileServer\Shared - 이렇게 작성한 것을 DeleteAllFilesAfter30Days.ps1 파일로 저장한다.
- 스크립트 파일을 실행해야 하므로 Set-ExecutionPolicy RemoteSigned를 실행하여 스크립트를 실행할 수 있는 환경을 만든다.
- DeleteAllFilesAfter30Days.ps1 파일을 Scheduled Task(예약 작업)에 추가하여 로그온 할 때 마다 자동으로 실행하도록 한다.
- 또는 Group Policy에 연결하여 특정한 컴퓨터에 적용하도록 한다.
- 이렇게 하여 모든 작업이 끝난다. 파일 서버에 이 작업을 걸 수도 있고 개인 컴퓨터에도 할 수 있다. 파일 서버에 적용할 때는 용량이 큰 파일을 하는 것도 괜찮다. 사실 파일 서버에 이 작업을 걸 때는 PowerShell을 이용하는 것보다는 FSRM을 이용하는 것이 좋다.