At actual field

Powershell로 로컬 프로필 삭제하기

Sergemeow 2024. 5. 2. 00:40

우리회사에는 공용PC들을 쓰는 부서가 있다. 공용PC다보니 부서원들이 그날그날 출근해서 매번 다른 PC를 사용하고, 그렇게 하다보니 PC마다 로컬 유저 프로필들이 잔뜩 생성되어 하드 용량을 꽉 채워버리기 부지기수. 

하드 증설 예정이나 그 전까지는 용량이 다찼다고하면 IT인원이 하나씩 지우는 수밖에 없다.

 

사진상에는 메가 단위지만 조금만 사용해도 기가 단위로 불어난다.

위의 캡처와 같이 관리자 계정으로 로그인하여 system advanced properties에서 프로필을 하나씩 삭제해도 되지만 시간이 오래걸리고 번거로우니 파워쉘을 이용한 자동삭제 스크립트를 작성했다.

 
try{
    Set-ExecutionPolicy remotesigned
}catch{    
}

$profiles = Get-WmiObject Win32_UserProfile | Where-Object { $_.Special -eq $false }
$addMore = $true
$exceptions = @()
$loggedUser = Read-Host "로그인된 블라인드 처리됨을 입력하세요"
$exceptions += $loggedUser
$exceptions += 블라인드 처리됨
while($addMore){
    $addUser = Read-Host "삭제 예외처리할 프로필의 블라인드 처리됨을 입력하세요. 더 없으면 공란으로 두고 엔터를 누르세요."
    if($addUser){
        $exceptions += $addUser
    }else{
        $addMore = $false
    }
}

foreach ($userProfile in $profiles) {
    $profileName = $userProfile.LocalPath -split '\\Users\\' | Select-Object -Last 1
    $detectWord = 블라인드 처리됨
    if( $exceptions -contains $profileName -or $detectWord -eq "블라인드 처리됨"){
        Write-Host "이 프로필은 생략됨 : $profileName" -ForegroundColor Yellow
    } else {
        try {
            Write-Host "$($profileName) 프로필 삭제 중. 잠시만 기다려주세요."
            $userProfile.Delete()
            Write-Host "$profileName 삭제 완료" -ForegroundColor Green
        } catch {
            Write-Host "$($profileName)을 삭제하는동안 에러가 발생하였습니다. 에러내용을 IT에 전달하여 도움을 요청하세요: $_.Exception.Message"
        }
    }
}

try{
    Set-ExecutionPolicy restricted
}catch{
}

Write-Host "프로필 삭제 작업이 완료되었습니다. 이 메시지가 뜨면 창을 닫아주세요." -ForegroundColor Green


# updated 2024.04.28
# 추가적으로 삭제 예외처리할 계정을 필요한만큼 추가 가능
# 블라인드 처리됨 계정은 삭제 예외처리함

# updated 2024.05.01
# Prevented throwing error messages while setting execution policy

 

회사 보안에 조금이라도 실마리를 줄 수 있는 부분은 블라인드 처리했지만 대략 어떤 식으로 삭제가 이루어지는지는 확인할 수 있을 것이다.

먼저 스크립트로 특정 동작들이 가능하도록 execution policy를 remotesigned로 잡아준다.

PC에 있는 로컬프로필들을 모두 불러오고, 로그인된 사용자와 추가적으로 삭제 예외처리할 프로필을 입력 받는다.

그리고나서 예외처리할 프로필들을 제외한 모든 프로필들을 삭제

혹시 모르니 execution policy를 다시 제한시키고 마무리

 

유저 PC에서 유저가 보고 있는동안 IDE나 ISE를 실행하는건 좋은 생각이 아닐 수 있으니 저 스크립트를 실행하는 bat 파일을 하나 생성했다. 테스트 결과 정상 동작하였고, 이후 해당부서의 PC들에 bat 파일을 배포해뒀다.

 

용량증설 전까지는 PC의 용량이 가득찰 때마다 그 bat 파일을 관리자권한으로 실행시키기만 하면 된다.