2011년 5월 30일 월요일

[Powershell] 특정한 파일을 검색하여 그 파일 모두를 삭제하기

로컬 및 원격 컴퓨터의 특정한 파일을 검색하여 그 파일 모두를 삭제하고자 한다.
1) 특정한 폴더의 파일 확인하기
Get-ChildItem d:\test\*
2) 특정한 폴더를 확인한 후 모두 삭제하기
Get-ChildItem d:\test\* | ForEach ($_) {Remove-Item $_.fullname}
3) 폴더의 특정한 파일을 포함한 것만 확인하기(확장자 txt)
Get-ChildItem d:\test\* -Include *.txt
4) 폴더의 특정한 파일을 포함한 것을 확인하되, 특정한 이름(파일 이름이 '업무'로 시작하는 것)이 들어 간 것은 제외하기
Get-ChildItem d:\test\* -Include *.txt -Exclude 업무*.txt
5) 하위 폴더까지 모두 확인하기
Get-ChildItem d:\* -Include *.txt -Recurse
6) 하위 폴더까지 모두 확인한 후 몽땅 삭제하기 (C:\ 아래에 있는 모든 임시 파일(*.tmp))
Get-ChildItem c:\* -Include *.tmp -Recurse | ForEach ($_) {Remove-Item $_.fullname}
7) 원격 컴퓨터의 파일(C:\Test\*)을 확인한 후 몽땅 지우기

원격 컴퓨터로 접속하려면 사전에 원격 컴퓨터에서 접속 허용을 해두어야 한다. Enable-PSRemoting -Force

또는 Group Policy를 사용하여 PS1 스크립트 파일을 적용하도록 해두어야 한다.

Invoke-Command -Computername R2-C -ScriptBlock {Get-ChildItem C:\test\* -Recurse} : 확인만 하기

Invoke-Command -Computername R2-C -ScriptBlock {Get-ChildItem C:\test\* -Recurse| ForEach ($_) {Remove-Item $_.fullname}} : 확인하고 지우기

8) 원격 컴퓨터의 파일 중에서 확장자가 mp3 파일만 확인한 후 모두 삭제하기 (음악 파일 및 동영상 파일 확인)

Invoke-Command -Computername R2-C -ScriptBlock {Get-ChildItem C:\test\* -Include *.mp3 -Recurse} : 확인만 하기

Invoke-Command -Computername R2-C -ScriptBlock {Get-ChildItem C:\test\* -Include *.mp3 -Recurse| ForEach ($_) {Remove-Item $_.fullname}} : 확인하고 지우기

9) 원격 컴퓨터가 많이 있을 때 파일 확인하고 삭제하기

이럴 때는 원격 컴퓨터의 이름을 파일로 만들어 둔다.( c:\computers.txt)

icm -computername (Get-Content c:\computers.txt) -ScriptBlock {Get-ChildItem C:\test\* -Include *.mp3 -Recurse} : 확인만 하기

icm -computername (Get-Content c:\computers.txt) -ScriptBlock {Get-ChildItem C:\test\* -Include *.mp3 -Recurse | ForEach ($_) {Remove-Item $_.fullname}} : 확인하고 지우기

10) 명령 내용이 너무 길기 때문에 위의 명령어를 파워셀 스크립트(.ps1) 파일로 만든 후, 이 파일을 불러 들어 실행하여 삭제하기

스크립트 파일 이름: DeleteMP3.ps1

스크립트 파일 내용: Get-ChildItem C:\test\* -Include *.mp3 -Recurse | ForEach ($_) {Remove-Item $_.fullname}

icm -FilePath c:\DeleteMP3.ps1 -Computername (Get-Content c:\computers.txt)

이렇게 하면 회사에 있는 모든 컴퓨터를 검색하여 mp3 파일을 몽땅 지울 수 있다.

** 주의 사항: ps1 스크립트 파일을 실행하려면 Set-ExecutionPolicy RemoteSigned 로 사전에 설정해두어야 한다.

11) 로컬 컴퓨터의 임시 파일(*.tmp)을 확인하고 지우고자 하면

Get-ChildItem C:\* -Include *.tmp -Recurse : 임시 파일 확인하기

Get-ChildItem C:\* -Include *.tmp -Recurse | | ForEach ($_) {Remove-Item $_.fullname} : 임시 파일 확인한 후 지우기

참고: http://blogs.technet.com/b/heyscriptingguy/archive/2006/10/23/how-can-i-use-windows-powershell-to-delete-all-the-tmp-files-on-a-drive.aspx