Powershell의 Script를 이용하여 30일이 지난 파일을 자동으로 삭제하거나 이동하기


  1. 파일이 생성된 특정한 기간이 지난 후에 자동으로 지우거나 옮길 필요가 있다. 특히 파일 서버를 운영하거나 FTP server를 운영할 때 필요하다. 또는 사용자 컴퓨터의 파일을 감시할 때도 필요하다.
  2. 예를 들면 c:\Temp 폴더나 File server에 저장된 Media File들을 저장소 관리를 위해서 특정 기간이 지나면 자동으로 삭제할 필요가 있다. 또한 사용자의 컴퓨터를 검색해서 음악 및 동영상 파일을 다른 서버로 이동하여 보관하는 것도 필요하다.
  3. 이것을 구현하기 위해서 다음과 같이 해 본다.
    1. 특정한 폴더의 내용을 먼저 본 후에 그것을 삭제한다.
      Get-ChildItem -Path c:\Temp -Recurse | Remove-Item
    2. 또는 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
    3. 이제는 현재를 시점으로 30일 전을 어떻게 표현을 하는지 생각해본다.
      Get-Date
      Get-Date | Get-Member
      (Get-Date).AddDays(-30)
      $today = Get-Date
      $DaysToDelete = $Today.AddDays(-30)
    4. 그 다음으로는 파일이 언제 만들어졌는지를 어떻게 확인할까?
      Get-ChildItem c:\Temp | Get-Member
      여기서 LastWriteTime을 주목한다. 이것은 파일이 생성되었거나 마지막으로 수정한 시간을 말한다.
      Get-ChildItem C:\Temp -Recurse | Where-Object {$_.LastWriteTime -lt $DaysToDelete}

  1. 이제 최종적으로 현재를 시점으로 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
  2. 이렇게 작성한 것을 DeleteAllFilesAfter30Days.ps1 파일로 저장한다.
  3. 스크립트 파일을 실행해야 하므로 Set-ExecutionPolicy RemoteSigned를 실행하여 스크립트를 실행할 수 있는 환경을 만든다.
  4. DeleteAllFilesAfter30Days.ps1  파일을 Scheduled Task(예약 작업)에 추가하여 로그온 할 때 마다 자동으로 실행하도록 한다.
  5. 또는 Group Policy에 연결하여 특정한 컴퓨터에 적용하도록 한다.
  1. 이렇게 하여 모든 작업이 끝난다. 파일 서버에 이 작업을 걸 수도 있고 개인 컴퓨터에도 할 수 있다. 파일 서버에 적용할 때는 용량이 큰 파일을 하는 것도 괜찮다. 사실 파일 서버에 이 작업을 걸 때는 PowerShell을 이용하는 것보다는 FSRM을 이용하는 것이 좋다.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s