Computer >> 컴퓨터 >  >> 체계 >> Windows Server

GPO 및 PowerShell을 사용하여 이전 사용자 프로필을 삭제하는 방법은 무엇입니까?

Windows 워크스테이션 및 서버, 특히 RDS(원격 데스크톱 서비스) 서버에서는 C:\Users에서 이전(사용하지 않는) 사용자 프로필을 정기적으로 제거해야 합니다. 모든 원격 데스크톱 서버의 주요 문제는 로컬 드라이브의 사용자 프로필 디렉터리 크기가 지속적으로 증가한다는 것입니다. 최대 사용자 프로필 크기(FSRM 또는 NTFS 할당량 사용)에 할당량을 활성화하면 부분적으로 해결됩니다. 그러나 터미널 서버 사용자가 많은 경우 시간이 지남에 따라 C:\Users 디렉터리에 더 이상 필요하지 않은 사용자 프로필이 있는 수많은 디렉터리가 누적됩니다.

Windows에서 수동으로 사용자 프로필을 삭제하는 방법

많은 초보 Windows 관리자는 C:\Users에서 사용자 프로필 폴더를 수동으로 삭제하려고 합니다. 폴더를 수동으로 삭제한 후 레지스트리 키 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\ CurrentVersion\ProfileList에서 이 폴더에 대한 링크가 있는 사용자 프로필 섹션을 삭제하면 할 수 있습니다. .

Windows에서 사용자 프로필을 수동으로 삭제하는 올바른 방법은 시스템 속성을 열고 고급 시스템 설정으로 이동하는 것입니다. -> 사용자 프로필 -> 설정 , 목록에서 사용자를 선택하고(로컬 드라이브의 프로필 크기가 표시된 크기 열) 삭제 버튼.

GPO 및 PowerShell을 사용하여 이전 사용자 프로필을 삭제하는 방법은 무엇입니까?

그러나 이것은 수동 방법이므로 자동화할 수 있습니다.

GPO:지정된 날짜보다 오래된 사용자 프로필 삭제

Windows에는 xx일이 지난 사용자 프로필을 자동으로 삭제하는 기본 제공 그룹 정책이 있습니다. 시스템을 다시 시작할 때 지정된 날짜보다 오래된 사용자 프로필 삭제 정책을 찾을 수 있습니다. GPO 섹션 컴퓨터 구성 -> 관리 템플릿 -> 시스템 -> 사용자 프로필 . 로컬 그룹 정책 편집기(gpedit.msc)에서 또는 GPMC.msc에서 도메인 정책을 사용하여 이 정책을 활성화할 수 있습니다.

정책을 활성화하고 사용자 프로필이 활성 상태로 간주되는 일 수를 지정합니다. 이 기간이 끝나면 Windows 사용자 프로필 서비스는 다음에 다시 시작할 때 프로필을 자동으로 삭제합니다. 45-90 기간을 지정하는 것이 좋습니다. 여기 일.

GPO 및 PowerShell을 사용하여 이전 사용자 프로필을 삭제하는 방법은 무엇입니까?

이 정책을 사용할 때 서버를 종료하거나 다시 시작할 때 시스템 시간에 문제가 없는지 확인하십시오("재부팅 후 시스템 시간 및 날짜 변경" 문서 참조). 그렇지 않으면 활성 사용자 프로필이 삭제될 수 있습니다.

이 자동 프로필 제거 방법과 관련된 주요 문제는 서버 다시 시작 및 비선택성 대기입니다(로컬 계정, 관리 계정 등과 같은 특정 사용자 프로필 삭제를 금지할 수 없음). 또한 일부 타사 소프트웨어(대부분 바이러스 백신임)가 사용자 프로필의 NTUSER.DAT 파일에 액세스하여 마지막 사용 날짜를 업데이트하는 경우 이 정책이 작동하지 않을 수 있습니다.

Windows에서 이전 사용자 프로필을 삭제하는 PowerShell 스크립트

위에서 설명한 자동 정리 프로필 정책을 사용하는 대신 간단한 PowerShell 스크립트를 사용하여 비활성화되거나 비활성 사용자의 프로필을 찾아 제거할 수 있습니다.

우선, PowerShell에서 디렉터리 크기 가져오기:

문서의 간단한 스크립트를 사용하여 C:\Users에 있는 모든 사용자 프로필 폴더의 크기를 계산해 보겠습니다.

gci -force 'C:\Users'-ErrorAction SilentlyContinue | ? { $_ -is [io.directoryinfo] } | % {
$len = 0
gci -recurse -force $_.fullname -ErrorAction SilentlyContinue | % { $len += $_.length }
$_.fullname, '{0:N2} GB' -f ($len / 1Gb)
$sum = $sum + $len
}
“Total size of profiles”,'{0:N2} GB' -f ($sum / 1Gb)

C:\Users에 있는 모든 사용자 프로필의 총 크기는 31.5GB입니다.

GPO 및 PowerShell을 사용하여 이전 사용자 프로필을 삭제하는 방법은 무엇입니까?

프로필을 60일 이상 사용하지 않은 사용자 목록을 표시해 보겠습니다. 프로필의 LastUseTime 필드에 있는 값을 사용하여 찾을 수 있습니다.

Get-WMIObject -class Win32_UserProfile | Where {(!$_.Special) -and ($_.ConvertToDateTime($_.LastUseTime) -lt (Get-Date).AddDays(-60))}| Measure-Object

내 RDS 호스트에 127개의 비활성 사용자 계정이 있는 것으로 나타났습니다(프로필의 총 크기는 약 18GB임).

GPO 및 PowerShell을 사용하여 이전 사용자 프로필을 삭제하는 방법은 무엇입니까?

이 모든 프로필을 제거하려면 사용자 목록을 Remove-WmiObject로 리디렉션하는 것으로 충분합니다. 명령(스크립트를 실행하기 전에 –WhatIf 매개변수를 사용하여 출력을 다시 확인하는 것이 좋습니다):

Get-WMIObject -class Win32_UserProfile | Where {(!$_.Special) -and (!$_.Loaded) -and ($_.ConvertToDateTime($_.LastUseTime) -lt (Get-Date).AddDays(-30))} | Remove-WmiObject –WhatIf

시스템과 같은 일부 사용자의 프로필을 삭제하지 않으려면 및 네트워크 서비스 계정, 로컬 관리자 계정, 활성 세션이 있는 사용자의 계정, 계정 예외 list), 다음과 같이 스크립트를 수정할 수 있습니다.

#The list of accounts, which profiles must not be deleted
$ExcludedUsers ="Public","zabbix_agent","svc",”user_1”,”user_2”
$LocalProfiles=Get-WMIObject -class Win32_UserProfile | Where {(!$_.Special) -and (!$_.Loaded) -and ($_.ConvertToDateTime($_.LastUseTime) -lt (Get-Date).AddDays(-60))}
foreach ($LocalProfile in $LocalProfiles)
{
if (!($ExcludedUsers -like $LocalProfile.LocalPath.Replace("C:\Users\","")))
{
$LocalProfile | Remove-WmiObject
Write-host $LocalProfile.LocalPath, "profile deleted” -ForegroundColor Magenta
}
}

종료 시 GPO를 사용하거나 작업 스케줄러의 PoSh 스크립트를 사용하여 이 PowerShell 스크립트를 실행할 수 있습니다.

프로필 자동 삭제를 구성하기 전에 사용자 환경에서 스크립트를 테스트하는 것이 좋습니다!

특정 AD 그룹(예:DisabledUsers 그룹)에 추가된 모든 사용자 프로필을 자동으로 제거하도록 스크립트를 수정할 수 있습니다.

$users = Get-ADGroupMember -Identity DisabledUsers | Foreach {$_.Sid.Value}
$profiles = Get-WmiObject Win32_UserProfile
$profiles | Where {$users -eq $_.Sid} | Foreach {$_.Delete()}